Java源码示例:com.baidu.brpc.client.RpcClientOptions
示例1
public Client() {
RpcClientOptions clientOption = new RpcClientOptions();
clientOption.setProtocolType(com.baidu.brpc.protocol.Options.ProtocolType.PROTOCOL_HTTP_JSON_VALUE);
clientOption.setWriteTimeoutMillis(1000);
clientOption.setReadTimeoutMillis(1000);
clientOption.setMaxTotalConnections(1000);
clientOption.setMinIdleConnections(10);
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_RANDOM);
clientOption.setCompressType(com.baidu.brpc.protocol.Options.CompressType.COMPRESS_TYPE_ZLIB);
String serviceUrl = "list://benchmark-server:8002";
this.rpcClient = new RpcClient(serviceUrl, clientOption);
this.userService = BrpcProxy.getProxy(rpcClient, UserService.class);
}
示例2
@Test
public void testBasic() {
RpcServerOptions rpcServerOptions = RpcOptionsUtils.getRpcServerOptions();
rpcServerOptions.setProtocolType(Options.ProtocolType.PROTOCOL_SERVER_PUSH_VALUE);
RpcServer rpcServer = new RpcServer(8000, rpcServerOptions);
rpcServer.registerService(new EchoServiceImpl());
rpcServer.start();
RpcClientOptions rpcClientOptions = RpcOptionsUtils.getRpcClientOptions();
rpcClientOptions.setProtocolType(Options.ProtocolType.PROTOCOL_SERVER_PUSH_VALUE);
rpcClientOptions.setClientName("c1");
RpcClient rpcClient = new RpcClient("list://127.0.0.1:8000", rpcClientOptions);
EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
rpcClient.registerPushService(new UserPushApiImpl());
Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello").build();
Echo.EchoResponse response = echoService.echo(request);
assertEquals("hello", response.getMessage());
ServerSideUserPushApi pushApi =
(ServerSideUserPushApi) BrpcPushProxy.getProxy(rpcServer, ServerSideUserPushApi.class);
PushData p = new PushData();
p.setData("abc");
PushResult pushResult = pushApi.clientReceive("c1", p);
assertEquals("got data:abc", pushResult.getResult());
rpcClient.stop();
rpcServer.shutdown();
}
示例3
public static RpcClientOptions getRpcClientOptions() {
RpcClientOptions options = new RpcClientOptions();
options.setIoThreadNum(1);
options.setWorkThreadNum(1);
options.setMinIdleConnections(0);
return options;
}
示例4
@Test
public void testRandomStrategy() {
RpcClientOptions clientOption = RpcOptionsUtils.getRpcClientOptions();
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_RANDOM);
RpcClient rpcClient = new RpcClient(serviceUrl, clientOption);
final Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello").build();
final EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
for (int i = 0; i < 10; i++) {
echoService.echo(request);
}
rpcClient.stop();
}
示例5
@Test
public void testRoundRobinStrategy() {
RpcClientOptions clientOption = RpcOptionsUtils.getRpcClientOptions();
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_ROUND_ROBIN);
RpcClient rpcClient = new RpcClient(serviceUrl, clientOption, null);
final Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello").build();
final EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
for (int i = 0; i < 10; i++) {
echoService.echo(request);
}
rpcClient.stop();
}
示例6
@Test
public void testWeightStrategy() {
RpcClientOptions clientOption = RpcOptionsUtils.getRpcClientOptions();
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_WEIGHT);
RpcClient rpcClient = new RpcClient(serviceUrl, clientOption, null);
final Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello").build();
final EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
for (int i = 0; i < 10; i++) {
echoService.echo(request);
}
rpcClient.stop();
}
示例7
@Test
public void testFairStrategy() {
RpcClientOptions clientOption = RpcOptionsUtils.getRpcClientOptions();
clientOption.setLatencyWindowSizeOfFairLoadBalance(10);
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_FAIR);
RpcClient rpcClient = new RpcClient(serviceUrl, clientOption, null);
final Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello").build();
final EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
for (int i = 0; i < 20; i++) {
echoService.echo(request);
}
rpcClient.stop();
}
示例8
public static void main(String[] args) {
RpcClientOptions options = new RpcClientOptions();
options.setProtocolType(Options.ProtocolType.PROTOCOL_DUBBO_VALUE);
options.setReadTimeoutMillis(1000);
options.setWriteTimeoutMillis(1000);
RpcClient rpcClient = new RpcClient("dubbo://127.0.0.1:2181", options);
NamingOptions namingOptions = new NamingOptions();
namingOptions.setGroup("");
namingOptions.setVersion("");
EchoService echoService = RpcClient.getProxy(rpcClient, EchoService.class, namingOptions);
for (int i = 0; i < 10; i++) {
EchoRequest request = new EchoRequest();
request.setMessage("hello world");
EchoResponse response = echoService.echo(request);
System.out.println("receive response:" + GsonUtils.toJson(response));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
rpcClient.stop();
}
示例9
public static void main(String[] args) {
RpcClientOptions clientOption = new RpcClientOptions();
clientOption.setProtocolType(ProtocolType.PROTOCOL_NSHEAD_PROTOBUF_VALUE);
// clientOption.setProtocolType(ProtocolType.PROTOCOL_NSHEAD_JSON_VALUE);
clientOption.setWriteTimeoutMillis(1000);
clientOption.setReadTimeoutMillis(5000);
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_FAIR);
clientOption.setEncoding("gbk");
// 高端口,在开发机上测试
String serviceUrl = "list://localhost:8080";
RpcClient rpcClient = new RpcClient(serviceUrl, clientOption);
// sync call
EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
RpcContext.getContext().setLogId(1234L);
Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello world").build();
EchoResponse response = echoService.echo(request);
System.out.println("--------nshead protobuf sync call response-----------------");
System.out.println(response.getMessage());
rpcClient.stop();
}
示例10
private static RpcClientOptions getRpcClientOptions() {
RpcClientOptions clientOption = new RpcClientOptions();
clientOption.setProtocolType(Options.ProtocolType.PROTOCOL_BAIDU_STD_VALUE);
clientOption.setWriteTimeoutMillis(1000);
clientOption.setReadTimeoutMillis(1000);
clientOption.setMaxTotalConnections(1000);
clientOption.setMinIdleConnections(10);
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_ROUND_ROBIN);
clientOption.setCompressType(Options.CompressType.COMPRESS_TYPE_NONE);
clientOption.setChannelType(ChannelType.SINGLE_CONNECTION);
clientOption.setKeepAliveTime(25);
return clientOption;
}
示例11
public static void main(String[] args) {
RpcClientOptions options = new RpcClientOptions();
// Stargate 协议需要强指定协议类型,不可使用BRPC协议解析器
options.setProtocolType(Options.ProtocolType.PROTOCOL_STARGATE_VALUE);
options.setReadTimeoutMillis(1000);
options.setWriteTimeoutMillis(1000);
RpcClient rpcClient = new RpcClient(StargateDemoConstant.namingUrl, options);
NamingOptions namingOptions = new NamingOptions();
namingOptions.setGroup(StargateDemoConstant.group);
namingOptions.setVersion(StargateDemoConstant.version);
StargateDemoService proxy = BrpcProxy.getProxy(rpcClient, StargateDemoService.class, namingOptions);
for (int i = 0, times = 10; i < times; i++) {
RpcContext rpcContext = RpcContext.getContext();
rpcContext.reset();
rpcContext.setRequestKvAttachment("key", "value");
StargateDemoReqDto reqDto = new StargateDemoReqDto();
reqDto.setId(1000L);
reqDto.setName("test");
StargateDemoResDto call = proxy.call(reqDto);
System.out.println(GsonUtils.toJson(call));
if (rpcContext.getResponseKvAttachment() != null) {
System.out.println(rpcContext.getResponseKvAttachment().get("resKey"));
}
System.out.println();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
rpcClient.stop();
}
示例12
@RequestMapping("/brpc")
@ResponseBody
public String brpc() {
RpcClientOptions clientOption = new RpcClientOptions();
clientOption.setProtocolType(Options.ProtocolType.PROTOCOL_BAIDU_STD_VALUE);
clientOption.setWriteTimeoutMillis(1000);
clientOption.setReadTimeoutMillis(5000);
clientOption.setMaxTotalConnections(1000);
clientOption.setMinIdleConnections(10);
clientOption.setLoadBalanceType(LoadBalanceStrategy.LOAD_BALANCE_FAIR);
clientOption.setCompressType(Options.CompressType.COMPRESS_TYPE_NONE);
String serviceUrl = "list://127.0.0.1:1118";
Echo.EchoRequest request = Echo.EchoRequest.newBuilder()
.setMessage("helloooooooooooo")
.build();
RpcClient rpcClient = new RpcClient(serviceUrl, clientOption);
EchoService echoService = BrpcProxy.getProxy(rpcClient, EchoService.class);
try {
EchoResponse response = echoService.echo(request);
System.out.println(response.getMessage());
} catch (RpcException ex) {
}
rpcClient.stop();
return SUCCESS;
}
示例13
@Test
@Ignore
public void testShareGlobalThreadPool() {
RpcServerOptions rpcServerOptions = RpcOptionsUtils.getRpcServerOptions();
rpcServerOptions.setProtocolType(Options.ProtocolType.PROTOCOL_SERVER_PUSH_VALUE);
rpcServerOptions.setGlobalThreadPoolSharing(true);
RpcServer rpcServer1 = new RpcServer(8000, rpcServerOptions);
rpcServer1.registerService(new EchoServiceImpl());
rpcServer1.start();
RpcServer rpcServer2 = new RpcServer(8001, rpcServerOptions);
rpcServer2.registerService(new EchoServiceImpl());
rpcServer2.start();
Assert.assertTrue(rpcServer1.getBossGroup() == rpcServer2.getBossGroup());
Assert.assertTrue(rpcServer1.getWorkerGroup() == rpcServer2.getWorkerGroup());
Assert.assertTrue(rpcServer1.getThreadPool() == rpcServer2.getThreadPool());
RpcClientOptions rpcClientOptions = RpcOptionsUtils.getRpcClientOptions();
rpcClientOptions.setProtocolType(Options.ProtocolType.PROTOCOL_SERVER_PUSH_VALUE);
rpcClientOptions.setClientName("c1");
rpcClientOptions.setGlobalThreadPoolSharing(true);
RpcClient rpcClient1 = new RpcClient("list://127.0.0.1:8000", rpcClientOptions);
EchoService echoService1 = BrpcProxy.getProxy(rpcClient1, EchoService.class);
rpcClient1.registerPushService(new UserPushApiImpl());
RpcClient rpcClient2 = new RpcClient("list://127.0.0.1:8001", rpcClientOptions);
EchoService echoService2 = BrpcProxy.getProxy(rpcClient2, EchoService.class);
rpcClient2.registerPushService(new UserPushApiImpl());
RpcClient rpcClient3 = new RpcClient("list://127.0.0.1:8001", rpcClientOptions);
EchoService echoService3 = BrpcProxy.getProxy(rpcClient3, EchoService.class);
rpcClient3.registerPushService(new UserPushApiImpl());
BrpcThreadPoolManager threadPoolManager = BrpcThreadPoolManager.getInstance();
Assert.assertTrue(threadPoolManager.getIoThreadPoolMap().size() == 1);
Assert.assertTrue(threadPoolManager.getWorkThreadPoolMap().size() == 1);
Echo.EchoRequest request = Echo.EchoRequest.newBuilder().setMessage("hello").build();
for (int i = 0; i < 1000; i++) {
Echo.EchoResponse response = echoService1.echo(request);
Echo.EchoResponse response2 = echoService2.echo(request);
Echo.EchoResponse response3 = echoService3.echo(request);
assertEquals("hello", response.getMessage());
assertEquals("hello", response2.getMessage());
assertEquals("hello", response3.getMessage());
}
// test shutndown and stop
rpcClient1.stop();
rpcClient2.stop();
rpcClient3.stop();
rpcServer1.shutdown();
rpcServer2.shutdown();
// client
Assert.assertTrue(threadPoolManager.getIoThreadPoolMap().size() == 1);
Assert.assertTrue(threadPoolManager.getWorkThreadPoolMap().size() == 1);
// server
EventLoopGroup r1BossGroup = rpcServer1.getBossGroup();
EventLoopGroup r1WorkerGroup = rpcServer1.getWorkerGroup();
ThreadPool r1ThreadPool = rpcServer1.getThreadPool();
Assert.assertFalse(r1BossGroup.isShutdown());
Assert.assertFalse(r1WorkerGroup.isShutdown());
Assert.assertFalse(r1ThreadPool.isStopped());
ShutDownManager.shutdownGlobalThreadPools();
try {
Thread.sleep(5 * 1000L);
} catch (InterruptedException e) {
// do nothing
}
Assert.assertTrue(threadPoolManager.getIoThreadPoolMap().size() == 0);
Assert.assertTrue(threadPoolManager.getWorkThreadPoolMap().size() == 0);
Assert.assertTrue(r1BossGroup.isShutdown());
Assert.assertTrue(r1WorkerGroup.isShutdown());
Assert.assertTrue(r1ThreadPool.isStopped());
}
示例14
/**
* Creates the rpc proxy factory bean.
*
* @param rpcProxy the rpc proxy
* @param beanFactory the bean factory
* @param rpcClientOptions the rpc client options
* @param namingServiceUrl naming service url
* @return the rpc proxy factory bean
*/
protected RpcProxyFactoryBean createRpcProxyFactoryBean(RpcProxy rpcProxy,
Class serviceInterface,
DefaultListableBeanFactory beanFactory,
RpcClientOptions rpcClientOptions,
String namingServiceUrl) {
GenericBeanDefinition beanDef = new GenericBeanDefinition();
beanDef.setBeanClass(RpcProxyFactoryBean.class);
MutablePropertyValues values = new MutablePropertyValues();
for (Field field : rpcClientOptions.getClass().getDeclaredFields()) {
try {
if (field.getType().equals(Logger.class)) {
// ignore properties of org.slf4j.Logger class
continue;
}
field.setAccessible(true);
values.addPropertyValue(field.getName(), field.get(rpcClientOptions));
} catch (Exception ex) {
LOGGER.warn("field not exist:", ex);
}
}
values.addPropertyValue("serviceInterface", serviceInterface);
values.addPropertyValue("namingServiceUrl", namingServiceUrl);
values.addPropertyValue("group", rpcProxy.group());
values.addPropertyValue("version", rpcProxy.version());
values.addPropertyValue("ignoreFailOfNamingService", rpcProxy.ignoreFailOfNamingService());
values.addPropertyValue("serviceId", rpcProxy.name());
// interceptor
String interceptorNames = parsePlaceholder(rpcProxy.interceptorBeanNames());
if (!StringUtils.isBlank(interceptorNames)) {
List<Interceptor> customInterceptors = new ArrayList<Interceptor>();
String[] interceptorNameArray = interceptorNames.split(",");
for (String interceptorName : interceptorNameArray) {
Interceptor interceptor = beanFactory.getBean(interceptorName, Interceptor.class);
customInterceptors.add(interceptor);
}
values.addPropertyValue("interceptors", customInterceptors);
} else {
values.addPropertyValue("interceptors", interceptors);
}
beanDef.setPropertyValues(values);
String serviceInterfaceBeanName = serviceInterface.getSimpleName();
beanFactory.registerBeanDefinition(serviceInterfaceBeanName, beanDef);
return beanFactory.getBean("&" + serviceInterfaceBeanName, RpcProxyFactoryBean.class);
}
示例15
/**
* Creates the rpc proxy factory bean.
*
* @return the rpc proxy factory bean
*/
private RpcProxyFactoryBean createRpcProxyFactoryBean(RpcProxy rpcProxy,
DefaultListableBeanFactory beanFactory,
Class serviceInterface) {
GenericBeanDefinition beanDef = new GenericBeanDefinition();
beanDef.setBeanClass(RpcProxyFactoryBean.class);
beanDef.setDependsOn("brpcApplicationContextUtils");
MutablePropertyValues values = new MutablePropertyValues();
BrpcConfig brpcConfig = getServiceConfig(beanFactory, serviceInterface);
for (Field field : RpcClientOptions.class.getDeclaredFields()) {
try {
if (field.getType().equals(Logger.class)) {
// ignore properties of org.slf4j.Logger class
continue;
}
field.setAccessible(true);
values.addPropertyValue(field.getName(), field.get(brpcConfig.getClient()));
} catch (Exception ex) {
log.warn("field not exist:", ex);
}
}
values.addPropertyValue("serviceInterface", serviceInterface);
values.addPropertyValue("serviceId", rpcProxy.name());
if (brpcConfig.getNaming() != null) {
values.addPropertyValue("namingServiceUrl", brpcConfig.getNaming().getNamingServiceUrl());
values.addPropertyValue("group", brpcConfig.getNaming().getGroup());
values.addPropertyValue("version", brpcConfig.getNaming().getVersion());
values.addPropertyValue("ignoreFailOfNamingService",
brpcConfig.getNaming().isIgnoreFailOfNamingService());
}
// interceptor
String interceptorNames = brpcConfig.getClient().getInterceptorBeanNames();
if (!StringUtils.isBlank(interceptorNames)) {
List<Interceptor> customInterceptors = new ArrayList<>();
String[] interceptorNameArray = interceptorNames.split(",");
for (String interceptorBeanName : interceptorNameArray) {
Interceptor interceptor = beanFactory.getBean(interceptorBeanName, Interceptor.class);
customInterceptors.add(interceptor);
}
values.addPropertyValue("interceptors", Arrays.asList(customInterceptors));
}
beanDef.setPropertyValues(values);
String serviceInterfaceBeanName = serviceInterface.getSimpleName();
beanFactory.registerBeanDefinition(serviceInterfaceBeanName, beanDef);
return beanFactory.getBean("&" + serviceInterfaceBeanName, RpcProxyFactoryBean.class);
}