0
点赞
收藏
分享

微信扫一扫

服务重启了,如何保证线程池中的数据不丢失方案 - 提前做持久化

服务重启了,如何保证线程池中的数据不丢失方案

方案:提前做持久化

1.用户请求过来之后,先处理业务逻辑1,紧接着向DB中写入一条任务数据,状态是:待执行。
2.然后将查出的任务提交到线程池中,由它处理业务逻辑2。
3.处理成功之后,修改任务的待执行状态为:已执行。
需要注意的是:业务逻辑2的处理过程,要做幂等性设计,同一个请求允许被执行多次,其结果不会有影响。
4.如果此时,线程池在处理的过程中,服务down机了,业务逻辑2的数据会丢失。
5.但此时DB中保存了任务的数据,并且丢失那些任务的状态还是:待执行。
在下一次定时任务周期开始执行时,又会将那些任务数据重新查询出来,重新提交到线程池中。
6.如果要考虑失败的情况,还需要在任务表中增加一个失败次数字段。
7.当失败超过了一定的次数,可以将任务状态改成:失败。这样后续可以人工处理。

 

举报

相关推荐

0 条评论