use of com.alipay.sofa.rpc.config.ConsumerConfig in project sofa-rpc by sofastack.
the class BoltServerTest method wellClose.
public void wellClose() {
// 只有1个线程 执行
ServerConfig serverConfig = new ServerConfig().setStopTimeout(60000).setPort(22222).setProtocol(RpcConstants.PROTOCOL_TYPE_BOLT).setQueues(100).setCoreThreads(1).setMaxThreads(2);
// 发布一个服务,每个请求要执行1秒
ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setRef(new HelloServiceImpl(1000)).setServer(serverConfig).setRepeatedExportLimit(-1).setRegister(false);
providerConfig.export();
ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setDirectUrl("bolt://127.0.0.1:22222").setTimeout(30000).setRegister(false);
final HelloService helloService = consumerConfig.refer();
int times = 5;
final CountDownLatch latch = new CountDownLatch(times);
final AtomicInteger count = new AtomicInteger();
// 瞬间发起5个请求,那么服务端肯定在排队
for (int i = 0; i < times; i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
LOGGER.info(helloService.sayHello("xxx", 22));
count.incrementAndGet();
} catch (Exception e) {
// TODO
} finally {
latch.countDown();
}
}
}, "thread" + i);
thread.start();
LOGGER.info("send " + i);
try {
Thread.sleep(100);
} catch (Exception ignore) {
}
}
// 然后马上关闭服务端,此时应该5个请求都还没执行完
try {
serverConfig.destroy();
} catch (Exception e) {
}
// 应该执行了5个请求
try {
// 服务端完成最后一个请求,但是由于睡了一定时间,所以这样等待最后一个客户端响应返回
latch.await(1500, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
}
Assert.assertTrue(count.get() == times);
}
use of com.alipay.sofa.rpc.config.ConsumerConfig in project sofa-rpc by sofastack.
the class BoltServerTest method badClose.
public void badClose() {
// 只有2个线程 执行
ServerConfig serverConfig = new ServerConfig().setStopTimeout(0).setPort(22222).setProtocol(RpcConstants.PROTOCOL_TYPE_BOLT).setQueues(100).setCoreThreads(1).setMaxThreads(2);
// 发布一个服务,每个请求要执行1秒
ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setRef(new HelloServiceImpl(1000)).setServer(serverConfig).setRepeatedExportLimit(-1).setRegister(false);
providerConfig.export();
ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setDirectUrl("bolt://127.0.0.1:22222").setTimeout(30000).setRegister(false);
final HelloService helloService = consumerConfig.refer();
int times = 5;
final CountDownLatch latch = new CountDownLatch(times);
final AtomicInteger count = new AtomicInteger();
// 瞬间发起5个请求,那么服务端肯定在排队
for (int i = 0; i < times; i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
LOGGER.info(helloService.sayHello("xxx", 22));
count.incrementAndGet();
} catch (Exception e) {
LOGGER.info(e.getMessage());
} finally {
latch.countDown();
}
}
}, "thread" + i);
thread.start();
LOGGER.info("send " + i);
try {
Thread.sleep(100);
} catch (Exception ignore) {
}
}
// 然后马上关闭服务端,此时应该5个请求都还没执行完
try {
serverConfig.destroy();
} catch (Exception e) {
}
// 应该执行了0个请求
Assert.assertTrue(count.get() == 0);
}
use of com.alipay.sofa.rpc.config.ConsumerConfig in project sofa-rpc by sofastack.
the class DiscardTimeoutTest method testAll.
@Test
public void testAll() {
ServerConfig serverConfig = new ServerConfig().setStopTimeout(0).setPort(22222).setQueues(5).setCoreThreads(1).setMaxThreads(1);
// 发布一个服务,每个请求要执行2秒
ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setRef(new HelloServiceImpl(2000)).setServer(serverConfig).setRegister(false);
providerConfig.export();
ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setTimeout(5000).setDirectUrl("bolt://127.0.0.1:22222").setRegister(false);
final HelloService helloService = consumerConfig.refer();
final AtomicInteger success = new AtomicInteger();
final AtomicInteger failure = new AtomicInteger();
int times = 4;
final CountDownLatch latch = new CountDownLatch(times);
for (int i = 0; i < times; i++) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
try {
helloService.sayHello("xxx", 22);
success.incrementAndGet();
} catch (Exception e) {
failure.incrementAndGet();
Assert.assertTrue(e instanceof SofaRpcException);
Assert.assertTrue(((SofaRpcException) e).getErrorType() == RpcErrorType.CLIENT_TIMEOUT);
} finally {
latch.countDown();
}
}
}, "T1");
thread1.start();
}
try {
// 此时客户端提前抛出超时异常
latch.await(10000, TimeUnit.MILLISECONDS);
} catch (InterruptedException ignore) {
}
// 2秒1个 超时3秒 超时3个
// 第一个请求正常
// 第二个请求返回时超时
// 第三个请求返回时超时
// 第四个请求已超时
Assert.assertEquals(success.get(), 2);
Assert.assertEquals(failure.get(), 2);
}
use of com.alipay.sofa.rpc.config.ConsumerConfig in project sofa-rpc by sofastack.
the class ZookeeperOverrideObserverTest method testAll.
@Test
public void testAll() throws Exception {
try {
RegistryConfig registryConfig = new RegistryConfig().setProtocol(RpcConstants.REGISTRY_PROTOCOL_ZK).setAddress("127.0.0.1:2181");
ZookeeperRegistry registry = (ZookeeperRegistry) RegistryFactory.getRegistry(registryConfig);
registry.start();
ServerConfig serverConfig = new ServerConfig().setPort(22222).setProtocol(RpcConstants.PROTOCOL_TYPE_BOLT);
ProviderConfig<OverrideService> providerConfig = new ProviderConfig<OverrideService>().setInterfaceId(OverrideService.class.getName()).setRef(new OverrideServiceImpl(22222)).setServer(serverConfig).setRegistry(registryConfig).setParameter(ProviderInfoAttrs.ATTR_WARMUP_TIME, "2000").setParameter(ProviderInfoAttrs.ATTR_WARMUP_WEIGHT, "100").setWeight(0);
ServerConfig serverConfig2 = new ServerConfig().setPort(22111).setProtocol(RpcConstants.PROTOCOL_TYPE_BOLT);
ProviderConfig<OverrideService> providerConfig2 = new ProviderConfig<OverrideService>().setInterfaceId(OverrideService.class.getName()).setRef(new OverrideServiceImpl(22111)).setServer(serverConfig2).setRegistry(registryConfig).setRepeatedExportLimit(-1).setWeight(0);
providerConfig.export();
providerConfig2.export();
ConsumerConfig<OverrideService> consumerConfig = new ConsumerConfig<OverrideService>().setInterfaceId(OverrideService.class.getName()).setRegistry(registryConfig).setTimeout(3333).setProtocol(RpcConstants.PROTOCOL_TYPE_BOLT);
OverrideService overrideService = consumerConfig.refer();
AddressHolder addressHolder = consumerConfig.getConsumerBootstrap().getCluster().getAddressHolder();
Assert.assertTrue(addressHolder.getAllProviderSize() == 2);
providerConfig2.unExport();
Assert.assertTrue(delayGetSize(addressHolder, 1, 100) == 1);
List<String> path = registry.getZkClient().getChildren().forPath("/sofa-rpc/" + OverrideService.class.getCanonicalName() + "/providers");
String url = URLDecoder.decode(path.get(0), "UTF-8");
ProviderInfo providerInfo = ProviderHelper.toProviderInfo(url);
// 模拟下发一个override
String override1 = providerInfo.getProtocolType() + "://" + providerInfo.getHost() + ":" + providerInfo.getPort() + "?timeout=2345";
String overridePath1 = "/sofa-rpc/" + OverrideService.class.getCanonicalName() + "/overrides/" + URLEncoder.encode(override1, "UTF-8");
registry.getZkClient().create().creatingParentContainersIfNeeded().withMode(CreateMode.PERSISTENT).forPath(overridePath1);
Assert.assertTrue(delayGetTimeout(consumerConfig, 2345, 100) == 2345);
// 删除目前没有影响
registry.getZkClient().delete().forPath(overridePath1);
Thread.sleep(500);
Assert.assertTrue(delayGetTimeout(consumerConfig, 2345, 100) == 2345);
// 恢复到3333
String override2 = providerInfo.getProtocolType() + "://" + providerInfo.getHost() + ":" + providerInfo.getPort() + "?timeout=3333";
String overridePath2 = "/sofa-rpc/" + OverrideService.class.getCanonicalName() + "/overrides/" + URLEncoder.encode(override2, "UTF-8");
registry.getZkClient().create().creatingParentContainersIfNeeded().withMode(CreateMode.PERSISTENT).forPath(overridePath2);
Assert.assertTrue(delayGetTimeout(consumerConfig, 3333, 100) == 3333);
// 清除持久化的 path
registry.getZkClient().delete().forPath(overridePath2);
} catch (Throwable e) {
LOGGER.error("ZookeeperOverrideObserver test case failed", e);
Assert.assertTrue(e.getMessage(), false);
}
}
use of com.alipay.sofa.rpc.config.ConsumerConfig in project sofa-rpc by sofastack.
the class BoltExceptionTest method testAll.
@Test
public void testAll() {
final String directUrl = "bolt://127.0.0.1:12300";
final ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>().setInterfaceId(HelloService.class.getName()).setDirectUrl(directUrl).setProtocol(RpcConstants.PROTOCOL_TYPE_BOLT).setBootstrap("bolt").setApplication(new ApplicationConfig().setAppName("clientApp")).setReconnectPeriod(1000);
HelloService helloService = consumerConfig.refer();
// 关闭后再调用一个抛异常
try {
helloService.sayHello("xx", 22);
} catch (Exception e) {
// 应该抛出异常
Assert.assertTrue(e instanceof SofaRouteException);
Assert.assertTrue(e.getMessage().contains(directUrl));
}
}
Aggregations