qq_61294100 2024-10-11 15:35 采纳率: 76%
浏览 16

RabbitMQ分布式事务问题

#RabbitMQ分布式事务问题

现在有一个商城系统,商城系统支付成功后会使用MQ发送消息给订单系统,订单系统修改状态为已支付,紧接着发送MQ消息给库存系统进行扣减库存,库存系统扣减成功后再次发送消息给订单系统来修改订单系统状态,这种情况下利用RabbitMQ如何解决分布式事务问题
比如这样设计: 订单系统或者库存系统报错后,先回滚自己的本地事务,然后再发送消息给另一个系统,另一个系统手动封装代码逻辑去监听这个消息进行回滚,这样的方案可行吗?

  • 写回答

1条回答 默认 最新

  • 编号灬9527 2024-10-11 16:27
    关注

    不知道别人系统怎么处理的,我们之前项目的处理,生产者投递消息是和事务一起的,事务提交才会发送消息,消费者端会首先将消息持久化,然后消费消息,消费失败的时候,持久化数据会记录处理失败!此条消息就算消费完毕,然后继续等待生产者投递的消息
    对于第一次就消费失败的数据,他也不是什么也不做,自己服务这里也有维护了一个阻塞队列,会将失败的消息组装成需要的数据格式,丢到这个队列中,有线程去消费这个失败的数据,如果再次消费失败,之前持久化的数据中,消费次数那个字段就会+1,如果没有达到最大消费次数(比如5次),这数据又会被塞到队列中,继续等待线程来消费它;
    如果达到最大消费次数,这条数据将会被记录为消费失败的数据,然后发出警告,需要人工干预

    评论

报告相同问题?

问题事件

  • 创建了问题 10月11日