@Test public void testProxy_timeout() { // 初始化config AsyncLoadConfig config = new AsyncLoadConfig(3 * 100l); // 设置超时时间为300ms // 初始化executor AsyncLoadExecutor executor = new AsyncLoadExecutor(10, 100); executor.initital(); // 初始化proxy AsyncLoadEnhanceProxy<AsyncLoadTestService> proxy = new AsyncLoadEnhanceProxy<AsyncLoadTestService>(); proxy.setService(asyncLoadTestService); proxy.setConfig(config); proxy.setExecutor(executor); AsyncLoadTestService service = proxy.getProxy(); AsyncLoadTestModel model1 = service.getRemoteModel("first", 1000); // 每个请求sleep 1000ms AsyncLoadTestModel model2 = service.getRemoteModel("two", 200); // 每个请求sleep 1000ms long start = 0, end = 0; start = System.currentTimeMillis(); try { System.out.println(model1.getDetail()); Assert.fail(); // 不会走到这一步 } catch (Exception e) { // TimeoutException异常 System.out.println(e); } end = System.currentTimeMillis(); Assert.assertTrue((end - start) < 500l); // 会超时 start = System.currentTimeMillis(); try { System.out.println(model2.getDetail()); } catch (Exception e) { Assert.fail(); // 不会走到这一步 } end = System.currentTimeMillis(); Assert.assertTrue((end - start) < 500l); // 不会超时 }
@Test public void testProxy() { // 初始化config AsyncLoadConfig config = new AsyncLoadConfig(3 * 1000l); // 初始化executor AsyncLoadExecutor executor = new AsyncLoadExecutor(10, 100); executor.initital(); // 初始化proxy AsyncLoadEnhanceProxy<AsyncLoadTestService> proxy = new AsyncLoadEnhanceProxy<AsyncLoadTestService>(); proxy.setService(asyncLoadTestService); proxy.setConfig(config); proxy.setExecutor(executor); // 执行测试 AsyncLoadTestService service = proxy.getProxy(); AsyncLoadTestModel model1 = service.getRemoteModel("first", 1000); // 每个请求sleep 1000ms AsyncLoadTestModel model2 = service.getRemoteModel("two", 1000); // 每个请求sleep 1000ms AsyncLoadTestModel model3 = service.getRemoteModel("three", 1000); // 每个请求sleep 1000ms long start = 0, end = 0; start = System.currentTimeMillis(); System.out.println(model1.getDetail()); end = System.currentTimeMillis(); Assert.assertTrue((end - start) > 500l); // 第一次会阻塞, 响应时间会在1000ms左右 start = System.currentTimeMillis(); System.out.println(model2.getDetail()); end = System.currentTimeMillis(); Assert.assertTrue((end - start) < 500l); // 第二次不会阻塞,因为第一个已经阻塞了1000ms start = System.currentTimeMillis(); System.out.println(model3.getDetail()); end = System.currentTimeMillis(); Assert.assertTrue((end - start) < 500l); // 第三次不会阻塞,因为第一个已经阻塞了1000ms // 销毁executor executor.destory(); }