有一张邮件表,存储三个字段:发送人,发送是否成功,发送内容在springmvc中有一个task,每5秒轮询一次这个表,查询出未发送成功的数据,并进行再次发送,发送成功后再更新表记录设置为发送成功。这里存在一个问题,如果第一次轮询发现有未发送成功的邮件并进行发送,但是在发送的过程中开始了5秒后的第二次轮询,由于第一次没发送完所以表记录还是未发生成功,这时候会造成发送重复邮件。请教有什么建议的解决方案吗?
2 回答
哈士奇WWW
TA贡献1799条经验 获得超6个赞
我说一个方案吧:再增加一个字段status字段标记当前邮件的处理状态,比如status=0未处理,status=1代表正在处理,status=2表示处理完成。每次轮询未发送的邮件WHEREstatus=0ANDisSend=false开始发送邮件更新status=1异步发送完成更新status=2其实你这个问题的症结在于发送是否成功这个字段只能表达是/否两种场景
智慧大石
TA贡献1946条经验 获得超3个赞
如果你使用的是0/5?这种表达式,并且发送右键是同步的(这里理解为可以拿到发送的结果),即使发送邮件超时也是没关系的,因为一个5秒执行不完的时候,会等到下一个周期才开始执行。例如最近五次的运行时间为2018/1/717:32:452018/1/717:32:502018/1/717:32:552018/1/717:33:002018/1/717:33:05如果在2018/1/717:32:45秒的任务到了2018/1/717:32:50还没有执行完成,将不会再触发2018/1/717:32:50的任务,而是等到2018/1/717:32:55的时候才会继续执行。
添加回答
举报
0/150
提交
取消