RabbitMQ可靠消息最终一致性

RabbitMQ保证消息的一致性解决方案 RabbitMQ保证消息的一致性 一、采用confirm消息确认机制及return返回机制 确保消息发送成功 二、将队列以及消息设置持久化 保证rabbitmq突然宕机消息仍然存在 三、手动确认接收消息方式 消息处理失败拒收重回队列 1. yml配置 spring: rabbitmq: host: 10.134.22.232 port: 5672 username: guest password: guest #采用confirm以及r 阅读详情

RabbitMQ可靠消息最终一致性

为什么要使用可靠消息最终一致性?

在实际的开发系统中,各个服务之间的调用可能是异步的,也就是说一个服务发消息给MQ然后,消费者从MQ中拿取消息。在这个过程中针对基于MQ的异步调用我们要保证分布式事务的原子性,要么一起成功,要么一起失败。所以这个时候就需要用上可靠消息最终一致性了。

什么是可靠消息最终一致性

通俗来讲就是上游服务需要保证消息一定会发出给MQ,下游服务一定会接收到消息,并且在成功消费掉消息之后,返回ack。这个方案是通过消息中间件完成的。

可靠消息最终一致性需要解决的问题

1 上游服务把信息成功发送

本地事务与消息发送的原子性问题:事务发起方在本地事务执行成功后消息必须发出去,否则就回滚事务。即实现本地事务和消息发送的原子性,要么都成功,要么都失败。

2 下游服务成把消息成功消费

事务参与方接收消息的可靠性:事务参与方必须能够从消息队列接收到消息。

3 对消息做幂等

消息重复消费的问题:由于网络2的存在,若某一个消费节点响应超时但是消费成功,此时消息中间件会重复投递此消息,就导致了消息的重复消费。

解决方案

问题 1:上游服务把消息成功发送

通过使用本地消息表来进行不断的扫描查看是否还有未发出的消息,通过quartz定时发送消息,如果发送成功,就讲本地消息表的状态改为成功发送状态或者删除。

可靠消息最终一致性流程图

问题2:消息中间件必须保证消息不丢失

消息中间件的持久化:

  1. MQ容器的持久化:声明的同时将durable属性设置为true
  2. exchange的持久化:声明的同时将durable属性设置为true
  3. Message的持久化:发送消息的时候,将basicProperties属性设置为MessageProperties.PERSISTENT_TEXT_PLAIN
问题3:下游服务成把消息成功消费

手动ack:保证消息投递失败时消息的重新投递

问题4:对消息做幂等

消息去重表:任务B处理消息前,先查询该消息是否被消费,如果没消费,处理任务B成功,记录消息。如果消息已经被消费,直接返回应答成功

在这里插入图片描述
附录1 本地消息表生成sql

DROP TABLE IF EXISTS `local_message`;
CREATE TABLE `local_message` (
  `tx_no` varchar(255) NOT NULL,
  `item_id` bigint DEFAULT NULL,
  `state` int(11) DEFAULT NULL,
  PRIMARY KEY (`tx_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

附录2 去重表生成sql

DROP TABLE IF EXISTS `msg_distinct`;
CREATE TABLE `msg_distinct` (
  `tx_no` varchar(255) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`tx_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 阅读详情

相关推荐

RabbitMQ数据同步一致性解决方案

1.概述 我们知道在使用RabbitMQ时,生产者将消息发布出去之后,消息是否顺利到达broker代理服务器呢?默认情况下发布操作没有任何信息返回给生产者,也就是生产者是不知道消息有没有顺利到达broker。如果在消息到达broker之前已经丢失了,那发布的消息就更不会到达队列并被消费者消费。如果出现上述情况,就会造成生产者发布的消息与消费者消费的消息不一致的问题。 2.RabbitMQ自...

wxyh的博客 1万+

分布式事务

分布式事务 1.什么是分布式事务 分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。 2.RocketMQ可靠消息最终一致性 2.1.为什么要使用可靠消息最终一致性 ​ 在实际系统的开发过程中,可能服务间的调用是异步的。也就是说,一个服务发送一个消息给 MQ,即消息中间件,比如RocketMQ、

weixin_49201230的博客 269

KF-gins输出结果绘图

KF-gins输出结果绘图

m0_51977577的博客 1107

RabbitMQ - 可靠消息最终一致性:事务消息方案

RabbitMQ 可靠消息最终一致性方案 🐰 核心摘要 本文探讨基于RabbitMQ实现分布式系统最终一致性的解决方案。针对跨服务数据一致性问题,传统强一致性方案存在性能瓶颈,而最终一致性通过异步消息机制提供了更优解。 关键实现要点: 消息可靠性保障:使用Confirm模式确保消息投递,结合持久化队列和手动ACK机制 事务消息设计:通过本地事务表记录消息状态,实现"业务操作+消息记录"的原子性 异常处理机制:引入死信队列处理失败消息,配合补偿任务实现可靠重试 方案优势: 解耦服务调用

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

0009 用VisualStudio设计Max工具

这次分享个独家专利^)^:在Visual Studio中设计3dsMax脚本工具界面。 某次做原型设计时,需求改来改去,实在懒得搞GUI;虽然也尝试在Axure RP里画原型,但还是Visual Studio更顺手,也更容易测试一些交互,就直接在VS里做了。后来突发奇想,想实验一把能否直接用到Max里去,结果没想到成功了,效果还挺好。发现了新大陆,记录一下。   开始: 在VS里新建W...

whwst的专栏 769

大专非科班拿下汇丰外包Java岗:我的TEKSystem面试全流程复盘(含IKM笔试真题)

本文详细记录了一位非科班大专生成功通过TEKSystem面试,拿下汇丰银行Java外包岗位的全过程。从IKM全英文笔试到技术面试,作者分享了7个关键转折点的实战经验,包括简历优化、技术考点、英语面试策略及薪酬谈判技巧,特别适合初级Java开发者参考。

weixin_30074763的博客 393

消息队列之RabbitMQ的五种消息模型,及如何保证可靠消息最终一致性

消息队列(Message Queue,简称MQ):是在消息的传输过程中保存消息的容器,用于分布式系统之间进行通信。MQ的选型和对比在讲RabbitMQ之前先说一下AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP规范发布。类比HTTP。

Tobenumerator的博客 1万+

Dify如何实现自主学习

摘要:Dify通过构建感知-决策-执行-反馈的闭环实现"自主学习",本质是打造能自动获取信息、更新知识库并调整策略的Agent工作流。核心包括:1)建立知识库作为记忆体;2)搭建感知与执行工具获取实时信息;3)通过工作流编排决策"大脑",包含LLM决策节点、行动执行节点和反馈反思节点。典型应用如根据用户反馈优化回答风格,通过存储反思日志到知识库实现持续优化。这种机制使智能体能基于新数据和经验不断自我改进。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 725

RabbitMQ - 可靠消息最终一致性:本地消息表方案

RabbitMQ可靠消息最终一致性:本地消息表方案实现 摘要 本文介绍基于RabbitMQ和本地消息表实现可靠消息最终一致性的分布式事务解决方案。该方案通过将消息与业务数据写入同一本地事务,确保消息不丢失,并利用独立的消息发送服务将消息投递到RabbitMQ。文章详细阐述了系统架构、数据库设计、Java代码实现(Spring Boot + MyBatis)以及最佳实践,包括: 创建本地消息表存储待发送消息 业务服务在事务中同时处理业务和消息记录 定时任务轮询发送待处理消息 消费者实现幂等处理 异常处理与重试

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

RISC-V V向量指令集学习笔记——访存指令

RISC-V V向量指令集学习笔记——访存指令

qq_41724469的博客 5136

RT-DETR-R18 的轻量化 Trick:剪枝与量化在模型中的应用

RT-DETR-R18轻量化技术通过结构化剪枝、混合精度量化和知识蒸馏的组合优化,实现了显著模型压缩效果。摘要如下: RT-DETR-R18模型通过创新轻量化技术组合,在保持46.2% mAP精度的前提下,将模型大小压缩至2.1MB(压缩率78%),计算量降至3.2 GFLOPs(减少78.2%),实现移动端28ms实时推理(加速37.8%)。核心技术包括:1)渐进式结构化剪枝系统,通过L1范数重要性评估和动态剪枝调度;2)混合精度量化策略,对关键层保留FP16精度;3)教师-学生知识蒸馏框架保持模型表达能

走向CTO的路上... 1191

分布式事务:基于rabbitmq可靠消息最终一致性

面临问题 随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用,随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事务此时已经提交,无法回滚,那么最终就会导致两边数据不一致性的问题。 设计理念 基于rabbitmq可靠消息的最终一致性,需要保证以下要素: 确认生产者一定要将数据投递到MQ服务器中,采用本地事务消息、定时任务、消息确认机制。 MQ消

anyincc125的博客 2666

电磁兼容(EMC):一文读懂过电应力(EOS)

过电应力(EOS)是指元器件承受的电流或电压应力超过其允许的最大范围。产品的电磁兼容(EMC)失效的一种常见模型为过电应力(EOS),也是电子产品失效的最常见的情况之一。过电应力基本与半导体器件相关,EOS事件包括有:静电放电(ESD)、雷击、系统瞬态、电磁脉冲、充电等。本文将详细讨论一下产品设计中如何关注EOS设计。

linkking27的博客 6485

别再手动回滚库存了!基于Spring Cloud + RabbitMQ的可靠消息最终一致性方案设计

本文详细介绍了基于Spring Cloud和RabbitMQ的可靠消息最终一致性方案,用于解决电商系统中的库存管理问题。通过延迟队列和死信队列实现库存自动解锁,避免手动回滚,确保分布式环境下的数据一致性。方案结合本地事务表和幂等处理,有效应对订单支付超时、取消等异常场景,提升系统可靠性。

weixin_30394669的博客 510

使用 MATLAB/Simulink + Simscape Electrical,构建一个含光伏并网系统与SVG的联合仿真模型,实现动态无功补偿与电压支撑

摘要:本文详细介绍了基于Simulink的SVG与光伏并网逆变器联合系统建模方法。通过构建包含光伏单元、SVG主电路和控制模块的仿真模型,实现动态无功补偿与电压稳定。重点阐述了ip-iq无功检测算法、双闭环控制和SVPWM调制等关键技术。仿真结果表明,该系统能快速响应无功需求,在10ms内将功率因数提升至0.98以上,有效抑制电压波动。文章为新能源并网系统中的电能质量治理提供了实用解决方案,并提出了进一步优化方向。

xiaoheshang_123的博客 322

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

rabbitmq ,mq可靠消息最终一致性方案的核心流程

①上游服务投递消息 如果要实现可靠消息最终一致性方案,一般你可以自己写一个可靠消息服务,实现一些业务逻辑。 首先,上游服务需要发送一条消息给可靠消息服务。这条消息说白了,你可以认为是对下游服务一个接口的调用,里面包含了对应的一些请求参数。 然后,可靠消息服务就得把这条消息存储到自己的数据库里去,状态为“待确认”。 接着,上游服务就可以执行自己本地的数据库操作,根据自己的执行结果,再次调用可靠消息服...

lixiangfei4的博客 1241

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

springboot RabbitMQ分布式事务-可靠消息的最终一致性方案代码示例

Rabbit mq分布式事务主要问题 如果先发送消息,再执行本地事务,可能会出现消息已经发送成功,但是Rabbit mq没有返回,则无法更新消息表;或者接收到消息成功发送通知,但是更新数据库失败; 如果先执行本地事务,再发送消息,可能本地事务执行成功,但Rabbit mq没有发送;或者发送了没有返回。 Rabbit mq分布式事务实现思路 生产者向Rabbit mq发送消息,消费者此时不消...

letterss的博客 4065

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【进阶之路】可靠消息最终一致性解决方案

导言 大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助 这是消息中间件的文章,大家没有看过的可以跟着看一下 【进阶之路】消息队列——原理及选型(一) 【...

南橘Home 2476

java 可靠消息服务_可靠消息最终一致(异步确保型)

前言一致性设计在分布式系统中是一个重要问题。如果一个系统同时使用多个子数据系统来存储与读取数据,就必须设计满足功能需求的一致性定义。如果系统对不同数据子系统进行操作的结果不一致,不但可能会使用户困惑,更可能引发更严重的数据问题或系统错误。一致性有多种级别,适用于不同的业务场景。对于金融等对数据一致性要求较高的行业,传统的事务可以提供较高的一致性保证。对于分布式系统等对性能(performance)...

weixin_28762271的博客 673

分布式事务之可靠消息最终一致性方案实践

如果你选用的消息中间件事rocketMQ,可以直接使用它的事务消息方便的实现分布式事务。但如果你用的是rabbitMQ或kafka这些没有事务消息的中间件,就需要自己来设计分布式事务的实现方案了。一种经典的方案是本地消息表,通过本地事务+定时任务来实现最终一致。本文介绍另一种方案,通过自己实现可靠性消息服务,来保证消息发布方和消费方的最终一致。

Lamb_IT的博客 731

大数据分布式事务:RabbitMQ的可靠消息方案

随着互联网系统从“单体架构”向“微服务架构”演进,一个用户操作(如“下单”)往往需要调用订单、库存、支付、物流等多个独立服务。传统单机数据库的事务(ACID)无法跨服务生效,这就需要分布式事务来保证多个服务操作的“要么全成功,要么全回滚”。本文聚焦“可靠消息最终一致性”这一分布式事务解决方案,重点讲解如何用RabbitMQ消息队列解决消息丢失、重复消费、状态不一致等核心问题,覆盖从原理到实战的完整链路。用“电商下单”故事引出分布式事务的挑战;拆解分布式事务、RabbitMQ可靠消息的核心概念;

AI 算法实战派 813

分布式事务解决方案——可靠消息最终一致性(本地消息表、MQ自身提供的可靠性保证)

什么是可靠消息最终一致性 指的是当事务发起方执行完成本地事务后并发送一条消息,事务参与方(消息的消费者)一定可以收到该消息,并完成接下来的业务处理,保证事务的成功。在此方案中,强调的是最终一致性,这就要保证发送的消息是一定能被事务参与者接收到的。 完成消息通知是需要使用消息中间件:MQ 事务发起方执行业务开启事务,发送消息到消息中间件 事务参与者监听消息中间件的队列,从队列中获取消息 在消息的传递过程中,消息是必须可靠的,必须能被事务参与者获取到的,这就是消息的可靠性 在事务的参与者接收到消

保暖透气大裤衩LeoLee的博客 998

消费消息删除_【进阶之路】可靠消息最终一致性解决方案

导言大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助上一章,讲了分布式系统中的柔性事务解决方案,并且介绍了一下2PC、3PC、与TCC解决方案。这一...

weixin_27230891的博客 144

RabbitMQ - 分布式事务问题:消息队列的柔性事务思路

摘要 本文探讨了在微服务架构下使用RabbitMQ实现分布式事务的柔性事务方案。主要内容包括: 问题背景:传统ACID事务在分布式系统中难以实现,强一致性方案存在性能瓶颈和可用性问题。 柔性事务优势:通过最终一致性替代强一致性,利用异步、补偿和重试机制保证数据一致性。 RabbitMQ的关键角色: 可靠消息投递 消费者手动ACK 死信队列处理失败消息 消息幂等性设计 延迟队列支持重试 典型实现模式:可靠消息最终一致性,通过"本地事务+消息表"确保业务操作与消息发送的原子性。 Java实现

千淘万漉虽辛苦,吹尽狂沙始到金 2万+
上一篇: RibbitMQ简单介绍和安装
下一篇: quartz定时任务
QAQnullPoint
博客等级 码龄4年 21粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值