说明:这里我们以增加订单和扣减库存为例。假设订单表和库存表分别在两个数据库中。
我们要创建一张任务表和一张历史任务表,这两张表可以放在订单数据库中。
一:订单服务
1.生成订单,将订单数据保存到订单表。
2.订单的信息保存在任务表中。
3.编写一个定时任务,定期查询任务表中的所以数据。
4.将查询到的数据逐条发送到待处理库存的rabbitMQ队列。
二:库存服务
5.编写一个监听类监听待处理库存的rabbitMQ队列。拿到消息。
6.判断消息在redis中是否存在。如果存在则该说明正在被处理,直接返回。
7.判断消息在历史任务表中是否存在。如果存在则该说明该消息被处理了,直接返回。
8.经过第6,7步则说明该消息还没有被处理。将消息添加到redis中。
9.扣减库存。
10.删除redis中的信息。
11.将消息发送到库存扣减成功的rabbitMQ队列。
三:订单服务
12.编写一个监听类监听库存扣减成功的rabbitMQ队列。拿到消息。
13.向历史任务表添加数据。
14,删除任务表的数据。
基本思路就这样吧,有点麻烦。条件允许的话推荐使用阿里的Seata框架吧。