RabbitMQ如何保证消息的顺序性【重点】
1.1 保证顺序性的意义
消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。
举例:
比如通过mysql binlog
进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误。比如数据库对一条数据依次进行了 插入->更新->删除
操作,这个顺序必须是这样,如果在同步过程中,消息的顺序变成了删除->插入->更新
,那么原本应该被删除的数据,就没有被删除,造成数据的不一致问题。
1.2 出现顺序错乱的场景
我们还是以RabbitMQ为例,后续会陆续更新更多的MQ的解决方案。
1.2.1 错乱场景一
①一个queue
,有多个consumer
去消费,这样就会造成顺序的错误,consumer
从MQ
里面读取数据是有序的,但是每个consumer
的执行时间是不固定的,无法保证先读到消息的consumer
一定先完成操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。
1.2.2 错乱场景二
一个queue
对应一个consumer
,但是consumer
里面进行了多线程消费,这样也会造成消息消费顺序错误。
1.3 保证消息的消费顺序
1.3.1 解决方案一
拆分成多个queue
,每个queue
一个consumer
,就是多一些queue
而已,确实是麻烦点;这样也会造成吞吐量下降,可以在消费者内部采用多线程的方式取消费。
1.3.2 解决方案二
或者就一个queue
但是对应一个consumer
,然后这个consumer
内部用内存队列做排队,然后分发给底层不同的worker
来处理
RabbitMQ如何保证消息的顺序性【重点】相关推荐
- 【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性
[重难点][RabbitMQ 02]如何避免消息重复投递和消息重复消费.如何防止消息丢失.如何保证消息的顺序性.如何保证消息队列的可用性 文章目录 [重难点][RabbitMQ 02]如何避免消息重复 ...
- 消息队列面试 - 如何保证消息的顺序性?
消息队列面试 - 如何保证消息的顺序性? 面试题 如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的 ...
- java 如何判定消息已在队列_【05期】消息队列中,如何保证消息的顺序性?
本文选自:advanced-java 作者:yanglbme 问:如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保 ...
- kafka的消费顺序_Kafka如何保证消息的顺序性
1. 问题 比如说我们建了一个 topic,有三个 partition.生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到 ...
- 消息中间件(五)——如何保证消息的顺序性
当我们的系统中引入了MQ之后,不得不考虑的一个问题是如何保证消息的顺序性,这是一个至关重要的事情,如果顺序错乱了,就会导致数据的不一致. 比如:业务场景是这样的:我们需要根据mysql的binlog日 ...
- videojs如何获取请求消息_消息队列中,如何保证消息的顺序性?
点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的 ...
- 如何保证消息的顺序性
一个消费者消费一个队列是没有顺序问题的. 多个消费者消费同一个队列时就出现消费顺序的问题.可以考虑将一个队列分为多个队列,将需要保证顺序的消息发到一个队列里,一个队列对应一个消费者.
- RabbitMQ消息中间件(二) RabbitMQ如何保证消息的可靠性投递
RabbitMQ如何保证消息投递的准确性? 生产端的可靠性投递: 1.保证消息成功发送 2.保证MQ节点成功接收 3.发送端收到MQ节点(Broker)确认应答 4.完善的消息补偿机制 BAT等大厂解 ...
- 多线程顺序消费MySQL数据_关于MQ的几件小事(五)如何保证消息按顺序执行
1.为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常.举例: 比如通过mysql binlog进行两个数据库的数据 ...
最新文章
- mysql数据集_Mysql 数据库-我的测试环境
- 30. 多线程编程之threading模块
- 关于职场和职业发展的一些心得
- python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能
- linux系统中scanf函数,Linux下scanf宽度控制问题
- 马云害怕的事还是发生了
- c++读取ini的Section节名
- Linux下高速缓存DNS的配置
- 一边撸猫一边写代码,Linus Torvalds 谈在家办公
- BGP超级失误:Verizon 搞垮 Cloudflare 和 AWS 等巨头,导致“连锁灾难性故障”
- java (Eclipse)连接MySQL数据库
- paip.项目文件同步-分支和合并总结V2012.9.23
- 使用MAT分析dump文件
- 配置Eclipse环境变量
- 博图如何上载wincc程序_博图导入触摸屏程序 如何通过博图下载触摸屏程序
- mysql和mybaits自增长序列详解_MyBatis Oracle 自增序列的实现方法
- github托管静态网页
- 阿里云存储OSS之九大使用技巧
- 风险热度地图(Risk heat map)
- 什么是GMS、CDMA、GPRS、EDGE、WCDMA、TD-CDMA、HSPA+、LTE?
热门文章
- 自建es集群数据迁移同步到腾讯云
- ICIP2020:VVC码率控制
- 45个纯 CSS 实现的精美边框效果【附在线演示和源码】【下篇】
- iOS动画的简单使用
- 安卓手机测评_安卓流畅榜第一的游戏手机,骁龙865+144Hz+高效散热,红魔5S测评...
- CString转char * ,string
- 外出住酒店,要先烧水浇马桶?对了,还有五件事要注意,别忘了
- python word排版_如何基于Python实现word文档重新排版
- 你们支持地摊在不影响交通情况下摆摊吗
- DNS暴力破解工具Fierce常用命令