• 使用RabbitMQ实现分布式事务


    RabbitMQ解决分布式事务思路:

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

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

    需要保证以下三要素

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

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

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

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

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

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

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

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

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

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

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

     解决方案:补单机制。

    传统解决方式:

    RabbitMq解决方案:

  • 相关阅读:
    mui 单页面下拉刷新
    phpStorm格式化代码快捷键
    mui 子页面切换父页面底部导航
    Java连接Mysql的基本用法
    string替换所有指定字符串(C++)
    MySql与Java的时间类型
    MYSQL中防止插入重复记录的解决方案(无重复值更新)
    Java数据库连接池封装与用法
    Java中数据库连接池原理机制的详细讲解(转)
    Fedora14使用yum安装mysql
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10924854.html
Copyright © 2020-2023  润新知