基于可靠消息的最终一致性方案

场景:二手项目的订单支付完成,需要发送消息给卖家(需要发货)

  1. 发送消息给卖家,提示卖家发货     
  2. 消息表新增预发送状态的消息记录     消息并未发送rabbitmq
  3. 订单修改状态,事务提交   只是本地事务
  4. 真正发送消息到rabbimq
  5. rabbitmq回调确认收到消息的ack给业务模块,这时修改消息状态为消息发送已完成状态
  6. rabbitmq消费者 消费完,再恢复消费完成的ack   消费者消费的时候需要确认订单是否已经是完成状态防止第二步失败

 

上述场景中,可能出现的问题,订单状态已修改,但是没有收到消息发送完成的ack(消息发送失败导致),需要起定时任务进行查询消息未完成的列表,然后进行重试发消息的动作,直到发送消息的ack收到为止

 

 

 

上述方案中使用了本地事务,如果想省去本地事务,定时任务扫描预发送状态的消息时,需要查询订单是否已支付状态。如果未支付,直接废弃消息记录。否则再发送消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值