任务派单,服务器定时取消

理查德1986 发布于 2017/01/20 10:17
阅读 466
收藏 0
公司一个项目,在给某个员工指派了一个任务。员工在app上面接收到任务的推送之后有30秒时间去确实是否有空去完成,同时服务器端也要开始计时在35秒后如果没有收到回复则将任务重新派送给另外一个员工。请问服务器端如何做到这个定时判断有否接收任务,然后重新派送?
加载中
0
风翔飞
风翔飞
指派时起个线程sleep35秒再去判断
大大吊炸天
大大吊炸天
当任务很多时,线程会把内存撑爆。java里面一个线程默认会分配1M内存
0
大大吊炸天
大大吊炸天
在定时任务里面处理。服务端定时任务每隔一秒扫描一下所有未处理的任务,并给每个任务tag+1(任务产生时tag=0),如果tag > 35的时候,重新向另一个员工推送任务,同事tag置为0;如果任务在扫描的过程中tag < 35并且 任务已被员工接受,那么就从扫描列表中移除该任务
风翔飞
风翔飞
这样定时任务一直扫描效率较低,如果频率不大还是走线程的好
风翔飞
风翔飞
还不如直接扫描未处理且35秒以上的任务,然后直接重新派送
0
大大吊炸天
大大吊炸天
如果有用MQ的话,可以使用延时队列处理
w
walter_xu
怎么知道在30秒内这个任务是否是有空完成?我只知道延时队列可以延迟一段时间后处理。是不是这个员工若有空去完成的话就去redis里面写个数据。等到30s之后判断redis是否有对应的来重新分配任务与否的。
大大吊炸天
大大吊炸天
回复 @理查德1986 : 你也可以用JDK内置的延时队列处理,DalayQueue这个类,不过数据是放在jvm内存里的,重启tomcat会消失的,可以在jvm关闭钩子上注册个监听,监听到tomcat要关闭时把队列数据持久化,这样数据基本就安全了
大大吊炸天
大大吊炸天
回复 @理查德1986 : 消息队列
风翔飞
风翔飞
这个可以
理查德1986
理查德1986
神马是MQ?
0
lugz
lugz

可以用数据表的方式处理吗?

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部