RabbitMQ常见的应用问题

news2024/10/1 12:13:18

文章目录

    • 1.消息可靠性保障
    • 2.消息的幂等性保障

1.消息可靠性保障

在实际生产环境中,可能会由于网络问题导致消息接收异常产生某种影响,基于这种情况我们需要保障消息的可靠性。

RabbitMQ中的消息可靠性也称为消息补偿,如下图所示,可以保证消息的可靠性。

分为9种种步骤实现消息补偿

1、生产者处理业务逻辑,将数据写入到数据库。

2、生产者将业务数据写入数据库后,向Q1消息队列发送消息数据。

3、生产者向Q1发送完消息数据后,过段时间后,会发送一个延迟消息到达Q3队列。

4、消费者从Q1队列中读取消息数据。

5、读取消息数据后,消费者根据业务逻辑向数据库中写入数据。

6.、消费者充当发布者的身份向Q2队列写入一条确认收到消息的数据,表示消费者已经收到数据并且进行了业务处理。

7、回调检查系统从Q2队列中读取消费者发送的消息数据。

8、回调检查系统再将消息数据写入到MQ数据库中,作用于记录消息传递是否成功的标志。

如果消费者接收消息出现了异常,接收失败了,第三步发送延迟消息就起到了保证消息可靠性的重要环节,生产者会发生一个延迟消息到Q3队列中,回调系统也会从Q3队列中读取延迟消息,延迟消息和正常消息是一模一样的,回调检查系统会把延迟消息的ID与MQ数据库中的消息ID进行比对,如果存在数据那么久不会再做任何处理,如果发现数据库中不存在这个消息ID,回调检查系统此时就会调用生产者重新发送消息,来保证消息传递的可靠性。

image-20220310115442826

还有另外一种情况,如何延迟消息和正常消息都接收异常了,又该如何处理呢?

很简单,如上图所示,会有一个定时检查的服务,业务数据入库时也会携带消息数据的ID,用消息数据的ID去比对MQ数据库中的消息ID,当数据不存在时,定时检查服务会去调用生产者再次发生消息数据,保证消息的可靠性。

2.消息的幂等性保障

幂等性的概念:一次或者多次请求相同的资源,触发一样的业务逻辑,最终返回的结果应该是最初同样的结果,例如你9点吃早饭,那么而不管你吃了多少次早饭,都应该是9点去,不能出现不同的结果。

在MQ消息队列中,正常情况下,无论发送了多少次相同的消息,最终的结果都应该是一样的,就比如一个消息数据要扣款五百,发送了很多次,绝对不能出现多次扣款的情况。

如何保证消息的幂等性,方式有很多种,比如通过数据库的乐观锁来实现。

数据库的乐观锁主要是在数据中加上一个version字段,当通过MQ的消息触发数据库数据的修改,修改的时候匹配的条件就需要加上version这个字段,只有数据中version=1存在时修改数据,第一条消息记录造成了数据修改,那么第二条消息发送过来的时候也会匹配version=1的数据,此时就不会造成数据的修改了,因为库中已经不存在这个数据了。

如下图所示,发送时就携带了一个version=1的消息数据,消费者读取数据进行处理时,也会在数据库中查询version=1的数据进行修改,如果第一次发送过来的消息被成功处理了,version的值就会被修改,那么库中就没有version=1的数据了,即使后面发送过来多条相同的数据,条件已经不满足了,也不会被数据库修改。

image-20220310132925225

第一次执行时version为1
update account set memory=memory-500,version=version+1 where id =1 and version=1
修改的数据也是匹配的version=1的数据,将数据里面的钱扣五百元,然后再将version+1,从而将version变成了2

第二次执行时,version已经是2了,从而无法匹配数据无法进行操作,保证数据的幂等性
update account set memory=memory-500,version=version+1 where id =1 and version=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析 Jetty 中的线程优化思路

作者:vivo 互联网服务器团队- Wang Ke 本文介绍了 Jetty 中 ManagedSelector 和 ExecutionStrategy 的设计实现,通过与原生 select 调用的对比揭示了 Jetty 的线程优化思路。Jetty 设计了一个自适应的线程执行策略(EatWhatYouKill&#xff09…

Origin如何绘制带拟合曲线的频数分布图?

文章目录 0.引言1.准备数据2.频数分布参数设置并绘图3.拟合曲线参数设置并绘图 0.引言 笔者研究的方向关于点云数据采集和建模算法,在对一个平面进行数据采集并建模后,需要实验结果进行精度分析,为了知道建模结果的点云集中于平面的程度&…

专场来袭,深度解读阿里云视频云的全智能进化

云智深度融合,视频云将幻化出怎样的新光景? 01 「云智新生」_ 视频云的全智能进化 新数智时代,云和AI在走向深度融合,以云计算为基石、以AI为引擎的云智深度融合,俨然成为行业共识。以“云智”为支撑,视频云…

基于JavaWeb的土特产销售购物商城的设计与实现

1.引言 随着互联网技术的不断发展,电子商务已成为一种重要的经济活动形式。土特产作为传统文化的代表之一,在旅游业中具有非常重要的地位。因此,将土特产销售与电子商务相结合,建立一个基于JavaWeb的土特产销售购物商城&#xff…

java进阶—代码演示多线程的生命周期

前言 回顾一下 到现在,我们已经知道了 线程的三种创建方式及其选择线程的常用方法线程的安全问题以及线程的死锁线程之间的通信(等待唤醒) 今天,我们一起来看看线程的生命周期,生命周期这个词在后续的javaweb 相关知…

【论文系列解读】LLM构建通用视觉(SUR-Adapter)声音模型(Tango)

通用视觉&音频模型的思考 0. 视觉(Diff)怎么和多模态结合(0) 总结(1) 关键技术(1-1) LangChain(1-2) **Versatile Diffusion**(1-3) Tango(1-4) SUR-adapter 1. SUR-Adapter(0) 总结(1) 摘要(2) 相关工作(2-1) 文图生成 & LLM(2-2) 语义理解和推理数据集(2-2-1) 数据收…

【案例教程】环境多介质逸度模型实践技术与典型案例【代码】应用

【原文链接】:【案例教程】环境多介质逸度模型实践技术与典型案例【代码】应用https://mp.weixin.qq.com/s/i8BpApcz1p4Ua6bytxhGwA 内容简要:【注:提供以下模型所有教程】 专题一:基本理论 1.逸度的定义 2.逸度模型的基本原理…

蓝牙音箱中应用的国产蓝牙芯片

蓝牙音箱指的是内置蓝牙芯片,以蓝牙连接取代传统线材连接的音响设备,通过与手机平板电脑和笔记本等蓝牙播放设备连接,达到方便快捷的目的。蓝牙音箱以便携音箱为主,外形一般较为小巧便携,蓝牙音箱技术也凭借其方便人的…

AI绘画中的负面词 是如何正确使用以及发挥作用

Stable Diffusion的艺术或图像生成,有些参数是必不可少的,其中之一就是负提示。本次将深入解析稳定扩散中的负提示是什么,如何使用这个参数来生成高质量的图像。 文章目录 negative prompt如何正确使用?正面词控制通过负面词控制 …

IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

从2PC和容错共识算法讨论zookeeper中的Create请求 | 京东云技术团队

最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对共识算法和2PC做梳理和区分&a…

近日网上传出消息,ARM正与Intel共同开发制造芯片

近日网上传出消息,ARM正与Intel共同开发制造芯片,让芯片设计者能够基于Intel 18A制程打造低功耗的SoC。另有多位业内人士透露,这次制造的芯片将主要用于移动设备、笔记本电脑、数据中心等。 若这一消息属实,会对中国芯片行业带来…

常见的SQL优化方案

1. insert优化 1.1 批量插入 我们之前插入数据都是一条一条插入的,会导致频繁操作数据库,从而影响性能。比如遍历某个集合,然后逐个使用insert语句插入数据库表中 INSERT INTO table (name, age) VALUES (张三, 18); INSERT INTO table (na…

6-js基础-3

JavaScript 基础 - 3 知道什么是数组及其应用的场景,掌握数组声明及访问的语法,具备利用数组渲染柱形图表的能力 今日重点: 循环嵌套数组综合案例 今日单词: 循环嵌套 利用循环的知识来对比一个简单的天文知识,我们…

arcpy制作脚本工具相关(制作并添加脚本工具、脚本工具消息提示、arcpy工具自动获取数据)

前言 采用arcpy制作arcgis的脚本工具,记录如下。 一、脚本工具的制作 制作脚本工具分为两步: 1、先编写对应功能的python脚步 2、将对应功能的脚本修改为,能自己手动选择输入输出数据的脚本 3、将修改完的脚本添加到工具箱 1、编写代码 我…

618种草观察丨益生菌「蓝」在一起,酸奶「地域控」?

2023年的“618”,食饮行业中,种草战线格外热闹,品牌花式“开屏”,吸引消费者。 数说故事发布「SMI社媒心智品牌榜」,本期持续关注健康食品,也新增了今夏网红酸奶行业,一起看看这两大赛道中&…

使用power rail连接secondary pg pin的方法

过往文章: secondary pg pin的作用与连接 之前写到过secondary pg pin的种类与几种连接方式,其中使用最多的方法是NDR rule + route_group的方式,这样工作量少,不容易出错,但也有弊端,那就是一…

ctfshow web入门 内网渗透篇

web859 首先ssh连接上之后传个fscan上去,扫描下内网靶机 发现.5和.6的比较可疑。 一个存在web服务,一个存在445端口。 先看下445端口,靶机给我们提供了msf,所以直接用msf打下Samba msfconsole use exploit/linux/samba/is_kno…

数字贸易下转口贸易企业如何高效管理?

什么是转口贸易?是指企业在国内购买进口货物,经过加工、组装、包装等方式改变其性质,再出口到海外市场的贸易活动。这种贸易方式对于促进国际贸易和提高企业竞争力都有着非常重要的作用,但同时也存在着一些风险和难点,…

如何向领导建议数字化转型应着手数据治理?_光点科技

在当今数字化时代,企业的数字化转型已经成为一个迫切的任务。然而,数字化转型不仅仅涉及技术的引入,更需要在数据治理方面进行全面的改进。 一、数据治理是数字化转型的基石。 数据是企业最重要的资产之一,通过对数据的管理和利用…