1.1 保证顺序性的意义

消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常

举例:
  比如通过mysql binlog进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误。比如数据库对一条数据依次进行了 插入->更新->删除操作,这个顺序必须是这样,如果在同步过程中,消息的顺序变成了删除->插入->更新,那么原本应该被删除的数据,就没有被删除,造成数据的不一致问题。

1.2 出现顺序错乱的场景

我们还是以RabbitMQ为例,后续会陆续更新更多的MQ的解决方案。

1.2.1 错乱场景一

①一个queue,有多个consumer去消费,这样就会造成顺序的错误,consumerMQ里面读取数据是有序的,但是每个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如何保证消息的顺序性【重点】相关推荐

  1. 【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性

    [重难点][RabbitMQ 02]如何避免消息重复投递和消息重复消费.如何防止消息丢失.如何保证消息的顺序性.如何保证消息队列的可用性 文章目录 [重难点][RabbitMQ 02]如何避免消息重复 ...

  2. 消息队列面试 - 如何保证消息的顺序性?

    消息队列面试 - 如何保证消息的顺序性? 面试题 如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的 ...

  3. java 如何判定消息已在队列_【05期】消息队列中,如何保证消息的顺序性?

    本文选自:advanced-java 作者:yanglbme 问:如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保 ...

  4. kafka的消费顺序_Kafka如何保证消息的顺序性

    1. 问题 比如说我们建了一个 topic,有三个 partition.生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到 ...

  5. 消息中间件(五)——如何保证消息的顺序性

    当我们的系统中引入了MQ之后,不得不考虑的一个问题是如何保证消息的顺序性,这是一个至关重要的事情,如果顺序错乱了,就会导致数据的不一致. 比如:业务场景是这样的:我们需要根据mysql的binlog日 ...

  6. videojs如何获取请求消息_消息队列中,如何保证消息的顺序性?

    点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的 ...

  7. 如何保证消息的顺序性

    一个消费者消费一个队列是没有顺序问题的. 多个消费者消费同一个队列时就出现消费顺序的问题.可以考虑将一个队列分为多个队列,将需要保证顺序的消息发到一个队列里,一个队列对应一个消费者.

  8. RabbitMQ消息中间件(二) RabbitMQ如何保证消息的可靠性投递

    RabbitMQ如何保证消息投递的准确性? 生产端的可靠性投递: 1.保证消息成功发送 2.保证MQ节点成功接收 3.发送端收到MQ节点(Broker)确认应答 4.完善的消息补偿机制 BAT等大厂解 ...

  9. 多线程顺序消费MySQL数据_关于MQ的几件小事(五)如何保证消息按顺序执行

    1.为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常.举例: 比如通过mysql binlog进行两个数据库的数据 ...

最新文章

  1. mysql数据集_Mysql 数据库-我的测试环境
  2. 30. 多线程编程之threading模块
  3. 关于职场和职业发展的一些心得
  4. python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能
  5. linux系统中scanf函数,Linux下scanf宽度控制问题
  6. 马云害怕的事还是发生了
  7. c++读取ini的Section节名
  8. Linux下高速缓存DNS的配置
  9. 一边撸猫一边写代码,Linus Torvalds 谈在家办公
  10. BGP超级失误:Verizon 搞垮 Cloudflare 和 AWS 等巨头,导致“连锁灾难性故障”
  11. java (Eclipse)连接MySQL数据库
  12. paip.项目文件同步-分支和合并总结V2012.9.23
  13. 使用MAT分析dump文件
  14. 配置Eclipse环境变量
  15. 博图如何上载wincc程序_博图导入触摸屏程序 如何通过博图下载触摸屏程序
  16. mysql和mybaits自增长序列详解_MyBatis Oracle 自增序列的实现方法
  17. github托管静态网页
  18. 阿里云存储OSS之九大使用技巧
  19. 风险热度地图(Risk heat map)
  20. 什么是GMS、CDMA、GPRS、EDGE、WCDMA、TD-CDMA、HSPA+、LTE?

热门文章

  1. 自建es集群数据迁移同步到腾讯云
  2. ICIP2020:VVC码率控制
  3. 45个纯 CSS 实现的精美边框效果【附在线演示和源码】【下篇】
  4. iOS动画的简单使用
  5. 安卓手机测评_安卓流畅榜第一的游戏手机,骁龙865+144Hz+高效散热,红魔5S测评...
  6. CString转char * ,string
  7. 外出住酒店,要先烧水浇马桶?对了,还有五件事要注意,别忘了
  8. python word排版_如何基于Python实现word文档重新排版
  9. 你们支持地摊在不影响交通情况下摆摊吗
  10. DNS暴力破解工具Fierce常用命令