zoukankan      html  css  js  c++  java
  • 使用RabbitMQ实现分布式事务

    RabbitMQ解决分布式事务思路:

    案例: 经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯。

    RabbitMQ解决分布式事务原理采用最终一致性原理

    需要保证以下三要素

    1、确认生产者一定要将数据投递到MQ服务器中(采用MQ消息确认机制)

    2、MQ消费者消息能够正确消费消息,采用手动ACK模式(注意重试幂等性问题)

    3、如何保证第一个事务先执行,采用补偿机制,在创建一个补单消费者进行监听,如果订单没有创建成功,进行补单。

    如果生产者投递消息到MQ服务器成功

      场景1:如果消费者消费消息失败了,生产者是不需要回滚事务的。

      解决方案:消费者采用手动ack应答模式,采用MQ进行补偿重试机制,注意MQ补偿幂等性问题。

     问题:如何确保生产者投递消息到MQ服务器一定能成功?

     解决方案:confirm机制(确认应答机制)。

    场景2 如果生产者投递消息到MQ服务器失败,如何解决?

     解决方案:使用生产者重试机制进行发消息,注意幂等性问题。

    场景3  如何保证一个事务先执行,生产者投递消息到MQ服务器成功,消费者消费成功了,但是订单却回滚了。 

     解决方案:补单机制。

    传统解决方式:

    RabbitMq解决方案:

  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10924854.html
Copyright © 2011-2022 走看看