RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

这篇具有很好参考价值的文章主要介绍了RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

了解什么是分布式事务问题

分布式事务是指涉及多个独立的计算机系统(也称为节点或参与者)之间的事务处理。在分布式系统中,每个节点可能各自拥有自己的数据存储和事务管理机制。分布式事务的目标是保证在跨多个节点执行的一系列操作可以以一致和可靠的方式执行和提交,即使在面对故障或并发操作时也能保持数据的完整性和一致性。

分布式事务通常包括以下四个关键属性:

  1. 原子性(Atomicity):要么所有的操作都成功执行并提交,要么所有的操作都回滚,保证所有节点的数据状态一致。
  2. 一致性(Consistency):事务执行前和执行后系统的状态保持一致。
  3. 隔离性(Isolation):事务在执行期间对其他事务是隔离的,即每个事务都感觉不到其他事务的存在。
  4. 持久性(Durability):一旦事务提交,其结果必须永久存储,即使在系统故障的情况下也能恢复。

实现分布式事务可以采用两阶段提交(Two-Phase Commit)协议或三阶段提交(Three-Phase Commit)协议等机制。这些协议通过协调参与者之间的状态和决策来实现分布式事务的一致性。然而,由于分布式事务需要跨越网络和多个节点进行通信和协调,因此可能会面临性能和可靠性等挑战。

举例说明:
当服务A通过restTemplate调用服务B的接口,服务A会持久化数据到A数据库,而服务B会持久化数据到数据库B,那么如果这个时候数据传输中间出现了问题,数据库A出现了持久化,而服务B持久化失败执行了回滚,但是数据库A是无法进行事务的回滚了,这个时候可能就会造成脏数据了

通过RabbitMQ来解决分布式事务问题

rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

MQ解决分布式事务问题

可靠生产

主要是通过一张冗余表和定时任务解决了可靠生产的问题
rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

在本地数据库中创建一张冗余表
(1)如果消息可以正常发送到MQ,并且MQ给与了确认消息,那么这条数据会在冗余表中设置status为1;
(2)如果MQ此时宕机,那么这条数据就会存储到冗余表中,设置状态码为0(默认状态),会创建一个定时任务,定时将冗余的消息再发送到MQ中;
(3)如果发送次数超过两会,也就是status字段为2,那么就会判断是消息出现了问题,然后通知人工来排查问题所在

可靠消费

rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

1.首先创建一个消费者,监听队列中的消息
rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器


2.如果消费者在消费消息的时候,出现了异常(代码中默认设置的是1/0的异常),那么就会触发MQ的重试机制,会导致死循环。解决消息重试的几种方案:(面试常问)
(1)控制重发的次数
在配置文件中进行相关重试次数的配置,如果达到了最大的重试次数,会把这条消息在队列中移除!
如果我们在配置文件中没有开启手动ack,使用默认的自动ack,那么会存在消息丢失的情况,一般不会使用这种方法rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

(2)try + catch + 手动ack
①第一步首先要在yaml配置文件开启手动ack,这样消息在出现异常,甚至是超过重试次数的时候就不会被移除,我们还能将这条消息转移到死信队列中!

rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

②在消费者消费消息的业务代码中,在catch中设置ack
调用basicNack方法,参数requeue,如果设置成false,那么消息如果消异常,就会将他转移到死信队列中,如果设置成true,那么就会将这条消息移除掉

rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

(3)try + catch + 手动ack + 死信队列处理 + 人工干预
①在上面开启手动ack的基础上,创建死信交换机和死信队列,绑定到接收消息的队列中,如果消息出现异常,那么就会将消息转移到死信队列中

②创建一个新的消费者来监听死信队列,这个消费者中的业务逻辑就不能包含处理异常消息的代码了,一般到了监听死信队列的情况下,再往后就得需要人工干预了!

rabbitmq能实现分布式事务吗?,RabbitMQ,分布式,rabbitmq,java,服务器

③还需要考虑数据的幂等性,就是要保证数据在数据库中不被重复添加
直接把订单号设置成主键,这样主键就一定是唯一的啦!
或者是使用分布式锁!

至此,关于RabbitMQ解决分布式事务的问题介绍完毕,后续还会持续更新相关技术点,敬请期待~~~文章来源地址https://www.toymoban.com/news/detail-856402.html

到了这里,关于RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springKafka 重试解决分布式事务

    目录 1.背景 1.1 名词解释、 1.2 业务场景 1.3 kafka消息的优点和缺点 1.4 kafka客户端重试框架 2.使用 2.1 引入pom依赖 2.2 定义重试消息,死信队列 2.3 业务执行异常处理 3.代码分析 3.1 服务启动扫描配置 3.2 消费消息并重新投递 3.3 控制消息重试频率及死信队列 3.4 控制消息的重试时

    2024年02月04日
    浏览(25)
  • 【SpirngCloud】分布式事务解决方案

    1.1 CAP 理论 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标: Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致 Availability(可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝 Partition tolerance(分区容

    2024年02月15日
    浏览(31)
  • 浅谈分布式事务及解决方案

    在讲述分布式事务的概念之前,我们先来回顾下事务相关的一些概念。 就是一个程序执行单元,里面的操作要么全部执行成功,要么全部执行失败,不允许只成功一半另外一半执行失败的事情发生。例如一段事务代码做了两次数据库更新操作,那么这两次数据库操作要么全部

    2024年02月08日
    浏览(37)
  • (快手一面)分布式系统是什么?为什么要分布式系统?分布式环境下会有哪些问题?分布式系统是如何实现事务的?

    《分布式系统原理与泛型》中这么定义分布式系统: “ 分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统 ”, 分布式系统(distributed system)是建立在网络之上的软件系统。 就比如:用户在使用京东这个分布式系统的时候,会感觉是在使用一

    2024年02月08日
    浏览(50)
  • Apache Seata -- 一款开源的分布式事务解决方案

    1.1 分布式事务简介 (1)事务 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。 (2)本地事务 ​ 在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于

    2024年03月17日
    浏览(44)
  • 分布式事务解决方案Seata(1.6.1)下载与基础配置

    seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 基于支持本地 ACID 事务的关系型数据库。 Java 应用,通过 JDBC 访问数据库。 两阶段提交协议的

    2023年04月12日
    浏览(37)
  • springcloud3 分布式事务解决方案seata之AT模式5

    1.XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源; 2.XA模式依赖数据库机制实现回滚;AT模式利用数据库快照实现数据回滚 3.XA模式强一致;AT模式最终一致。 1.2 AT模式原理 一阶段: 1.TM发起并注册全局事务到TC; 2.TM调用分支事务; 3.RM进行注册分支

    2024年02月07日
    浏览(35)
  • SpringCloud Alibaba - Seata 四种分布式事务解决方案(XA、AT)+ 实践部署(上)

    目录 一、Seata 分布式事务解决方案 1.1、XA 模式 1.1.1、XA模式理论 第一阶段: 第二阶段: 1.1.2、Seata 框架中的 XA 模式 第一阶段: 第二阶段: 1.1.3、XA 模式的优缺点 1.2.4、实现Seata 的 XA 模式 a)修改 application 文件(每一个参与事务的微服务) b)给发起全局事务中的入口方法

    2024年04月14日
    浏览(33)
  • 分布式:一文吃透分布式事务和seata事务

    什么是事务 事务是并发控制的单位,是用户定义的一个操作序列。 事务特性 原子性(Atomicity): 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 一致性(Consistency): 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性

    2024年02月07日
    浏览(47)
  • 一文拿捏分布式、分布式缓存及其问题解决

    1.集中式 传统的计算模型通常是集中式的,所有的计算任务和数据处理都由 单一的计算机或服务器 完成。然而,随着数据量和计算需求的增加,集中式系统可能会面临性能瓶颈和可靠性问题。 故而引出了分布式↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包