背景:在 controller 里并发调用三个其他服务接口,然后组装数据返回
@RequestMapping({"/flow/test"})
@ResponseBody
public String hello(HttpServletRequest request, @RequestParam(name = "tabId", required = false) Integer tabId) {
ExecutorService servicepool = Executors.newFixedThreadPool(10);
ExecutorCompletionService<String> service = new ExecutorCompletionService<String>(servicepool);
service.submit(() -> {
String uri = "http://localhost/api/user/info";
return HttpHelper.getRequest(uri, 300);
});
service.submit(() -> {
String uri = "http://localhost/api/news/list";
return HttpHelper.getRequest(uri, 300);
});
service.submit(() -> {
String uri = "http://localhost/api/flow/list";
return HttpHelper.getRequest(uri, 300);
});
List<String> curlResult = new ArrayList<>();
try {
servicepool.shutdown();
for (int i = 0; i < 3; i++) {
curlResult.add(service.take().get());
}
} catch (Exception ex) {
}
//TODO 组装数据
return JSON.toJSON(curlResult).toString();
}
问题:这样写可不可以?有什么弊端或者是有什么需要注意的地方,请大佬们指点一二
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.