781 Star 7.1K Fork 2.5K

GVP京东零售 / asyncTool

 / 详情

实现ITimeoutWorker针对单个worker设置超时时间不生效

待办的
任务
创建于  
2020-08-18 17:59

通过实现ITimeoutWorker接口创建worker(worker执行代码为Thread.sleep(1000)),并设置enableTimeOut方法返回true,设置timeOut方法返回800毫秒,当执行worker的时候,依然可以正常执行成功,并没有因超时而执行失败

评论 (6)

Genius 创建了任务
展开全部操作日志

最早期版本是有单独的worker超时控制的,但是有问题,就是每一个监控,都需要额外开辟一个线程来监控他的超时。这样会导致线程数爆炸。后来专门删掉了,保留了组超时

最早期版本是有单独的worker超时控制的,但是有问题,就是每一个监控,都需要额外开辟一个线程来监控他的超时。这样会导致线程数爆炸。后来专门删掉了,保留了组超时

@tianyaleixiaowu 虽然组超时可以满足大部分的需求,并且针对单个worker设置超时会有线程爆炸的情况,但比如对一些关键接口或者外部接口的数据调用,如果超时则发送email报警,是有业务价值的;建议保留针对单个线程设置超时的功能,在文档中说明情况,由使用者进行判定如何使用。

您好,不太明白这里为什么保留单个任务超时的原因?组超时之后不是会遍历然后stopNow吗?这样的话也能对这些超时后没有执行的任务做处理?所以为什么还要保留每个任务work时自己对超时的控制呢?

这个目前有点困难,改动量会比较大。如果不是特别复杂的,如超过5个以上的编排任务,建议直接使用compleableFuture的超时来完成。而超过10个以上,用asyncTool时,再监控单个超时肯定出现线程暴增的情况。

dev分支的v1.5.1-SNAPSHOP版本加入了单wrapper时间监控的功能(原理是单线程时间轮对所有注册的wrapper进行检查),可以试试看(暂未大规模测试过,可能会有潜在bug)

我在timeWheel分支里实现了单个任务超时的功能,采用时间轮方式

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(4)
303698 tianyalei 1578919857 5696078 tcsn site 1677721730
Java
1
https://gitee.com/jd-platform-opensource/asyncTool.git
git@gitee.com:jd-platform-opensource/asyncTool.git
jd-platform-opensource
asyncTool
asyncTool

搜索帮助

14c37bed 8189591 565d56ea 8189591