首页 新闻 会员 周边 捐助

ExecutorService超时响应问题

1
悬赏园豆:5 [待解决问题]

基本的场景是这样的:

一个上游请求进来,我们需要同时向外部合作平台(N个)发起N个请求,同时需要在一定时间内得到响应,若超时则弃用。同时将这些响应选择回应给最初的上游请求。

所以选择使用ExecutorService,用

List<Future<Object>> result = es.invokeAll(tasks, TIME_OUT, TimeUnit.MILLISECONDS);

得到执行结果;同时http请求也设置了超时参数:

urlConnection.setConnectTimeout(100);
urlConnection.setReadTimeout(100);

在并发不高的情况下,程序没有问题。但在并发达到1000左右的时候,程序就出问题了。具体表现为:
在设置了TIME_OUT的情况下,偶尔也会出现超时但ExecutorService并没有放弃任务,并在大于TIME_OUT的时间返回执行结果。由于时效性非常高,超时的响应不但无效,而且直接影响了上游请求的响应时效。

现在困惑的是,代码都是在方法内部完成,没有共享变量,因而没有线程安全问题。那么,问题究竟出现在哪里?求解。

是奉壹呀的主页 是奉壹呀 | 初学一级 | 园豆:4
提问于:2016-04-29 15:35
< >
分享
所有回答(1)
0

这里要注意一点, 接收数据 和 处理数据, 在高并发的时候一定要分成两个程序来处理.

walen | 园豆:429 (菜鸟二级) | 2016-05-01 22:01

需要采异步的方式来处理

支持(0) 反对(0) walen | 园豆:429 (菜鸟二级) | 2016-05-01 22:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册