rabbitmq分布式事务

Rabbitmq解决分布式事务的原理:可靠消息最终一致性方案

  需要保证以下三要素

      1、确认生成者一定要将消息可靠投递到MQ【采用MQ的异步confirm消息确认机制】
            

              public interface ConfirmListener {
                    /**
                     ** handleAck RabbitMQ消息接收成功的方法,成功后业务可以做的事情
                     ** 发送端投递消息前,需要把消息先存起来,比如用KV存储,接收到ack后删除
                    **/
                    void handleAck(long deliveryTag, boolean multiple)
                          throws IOException;

                  //handleNack RabbitMQ消息接收失败的通知方法,用户可以在这里重新投递消息
                   void handleNack(long deliveryTag, boolean multiple)
                         throws IOException;
            }


      2、MQ消费者能将消息正确消费,采用手动ACK模式【保证消息的幂等性】

      3、生产者和消费者事务回滚问题

一、方案

rabbitmq分布式事务

3.1 整体设计思路

rabbitmq分布式事务

rabbitmq分布式事务

3.2 步骤1 - 可靠的消息生产记录消息发送

rabbitmq分布式事务

3.3 步骤2 - 可靠消息生产(修改消息发送状态)

rabbitmq分布式事务

rabbitmq分布式事务

3.4 步骤3 - 可靠消息处理(正常处理)

rabbitmq分布式事务

rabbitmq分布式事务

rabbitmq分布式事务

3.5 步骤4 - 可靠消息处理(消息重发)

rabbitmq分布式事务

rabbitmq分布式事务

上一篇:如何保证mq不丢消息


下一篇:缓存双写一致性