需求:
1.我们要求任务处理服务要做到高可靠性,因此需要搞成多机分布式服务,即使一个服务挂了,还有别的服务可以使用可以处理
2.保障各个服务均可以同时拿到数据进行高效处理
3.数据不能重复处理...锁定一批数据
3.处理数据
4.更新这批task
5.提交事务
这么做呢就有个非常严重的问题,---同一时刻只有一个有效服务
如果A系统拿到了数据,开始了事务但是没提交,那么B系统同样的条件也会查到同一批还没处理好提交的数据...status=2(发送中),lockKey=一个唯一数(防止两个服务拿到同一批更新的数据,我们用的是redis的一个自增id)
3.根据ids和locaKey查询出本批次哪些数据被本轮处理函数更新了(这就是好处...--强烈推荐
我这里只写了大致的方案,一些redis高可用以及数据幂等性自己考虑去.
1.向mysql写任务的时候同步的向redis zset里写一份,并设置score为自己的搜索条件,比如我这里是发送时间...2.所有的服务消费数据直接从redis zet直接消费,获取小于等于当前时间的一个批次数据(比如100条).
3.利用从redis拿的数据去mysql里拿数据
这种方式是我觉得最好的方案了,完全保障了每个服务每次处理