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);
}