`
m635674608
  • 浏览: 4930000 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

rocketmq怎么保证队列完全顺序消费?

    博客分类:
  • MQ
 
阅读更多

实际上,RocketMQ是支持顺序消费的。 但这个顺序,不是全局顺序,只是分区顺序。要全局顺序只能一个分区。 之所以出现你这个场景看起来不是顺序的,是因为发送消息的时候,消息发送默认是会采用轮询的方式发送到不通的queue(分区)。如图: 而消费端消费的时候,是会分配到多个queue的,多个queue是同时拉取提交消费。 如图: 但是同一条queue里面,RocketMQ的确是能保证FIFO的。那么要做到顺序消息,应该怎么实现呢——把消息确保投递到同一条queue。 rocketmq消息生产端示例代码如下: 按照这个示例,把订单号取了做了一个取模运算再丢到selector中,selector保证同一个模的都会投递到同一条queue。 即: 相同订单号的--->有相同的模--->有相同的queue。 最后就会类似这样: 这样同一批你需要做到顺序消费的肯定会投递到同一个queue,同一个queue肯定会投递到同一个消费实例,同一个消费实例肯定是顺序拉取并顺序提交线程池的,只要保证消费端顺序消费,则大功告成! 如何保证顺序消费? 如果是使用MessageListenerOrderly则自带此实现,如果是使用MessageListenerConcurrently,则需要把线程池改为单线程模式。 (这里假设触发了重排导致queue分配给了别人也没关系,由于queue的消息永远是FIFO,最多只是已经消费的消息重复而已,queue内顺序还是能保证) 但的确会有一些异常场景会导致乱序。如master宕机,导致写入队列的数量上出现变化。 如果还是沿用取模的seletor,就会一批订单号的消息前面散列到q0,后面的可能散到q1,这样就不能保证顺序了。除非选择牺牲failover特性,如master挂了无法发通接下来那批消息。 从消费端,如果想保证这批消息是M1消费完成再消费M2的话,可以使用MessageListenerOrderly接口,但是这样的话会有以下问题: 1. 遇到消息失败的消息,无法跳过,当前队列消费暂停 2. 目前版本的RocketMQ的MessageListenerOrderly是不能从slave消费消息的。 更多分析请参考: RocketMQ--角色与术语详解 - 薛定谔的风口猪 RocketMQ--水平扩展及负载均衡详解 - 薛定谔的风口猪

 

 

https://www.zhihu.com/question/30195969

分享到:
评论

相关推荐

    Android代码-advanced-java

    如何保证消息不被重复消费?(如何保证消息消费的幂等性) 如何保证消息的可靠性传输?(如何处理消息丢失的问题) 如何保证消息的顺序性? 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?...

    Java高级架构面试知识点整理.pdf

    3.如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 4.如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 5.如何保证消息的顺序性? 6.如何解决消息队列的延时以及过期失效问题?消息队列...

    Java面试MQ(Message Queue)消息队列.pdf

    一、MQ介绍 二、MQ的使用 1应用解耦 2异步处理 3流量削峰 4日志处理 5消息通讯 ...六、如何保证消息不被重复消费? 七、如何保证消息不丢失? 八、如何保证消息的顺序性? 九、消息大量积压怎么解决?

    RocketMq源码学习过程中的总结资料

    3:rocketmq怎么保证队列完全顺序消费 4:消费速度慢的处理方式 5:Broker线程模型 6:Rocket MQ 消息过滤是发生在服务端还是客户端? 7:为什么基于表达式 tag 会在客户端再进行一次过滤 8:Rocketmq中的单向...

    手写RocketMq详细操作手册

    RocketMq操作手册:针对入门初中级别。 消息队列 RocketMQ 是阿里巴巴集团基于高可用...制,所有主题的消息存储基于顺序读写,极大提高消息写性能,同时为了兼顾消息消费与消息查找,引入消息消费队列文件与索引文件

    RocketMQ资料.docx

    Apache Alibaba RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点: • 支持严格的消息顺序 • 支持 Topic 与 Queue 两种模式 • 亿级消息堆积能力 • 比较友好的分布式特性 • 同时支持 Push 与 Pull ...

    RocketMQ详细介绍及核心问题解释(很全)

    Broker还提供了消息的事务、顺序消费、定时消费、广播消费等高级特性。Consumer负责消息的消费,它从Broker服务器拉取消息并提供给应用程序。Consumer提供了拉取式消费和推动式消费两种消费形式。 RocketMQ支持发布...

    RocketMQ3.2.6

    RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点: 1、支持严格的消息顺序; 2、支持Topic与Queue两种模式; 3、亿级消息堆积能力; 4、比较友好的分布式特性; 5、同时支持Push与Pull方式消费消息;

    RocketMQ-3.1.0

    RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点: 1、支持严格的消息顺序; 2、支持Topic与Queue两种模式; 3、亿级消息堆积能力; 4、比较友好的分布式特性; 5、同时支持Push与Pull方式消费消息;

    RocketMQ核心概念1

    核心概念消息生产者生产者组消息消费者拉取式消费者推动式消费者消费者组主题消息消息队列标签Broker服务器名称服务消息模型消息顺序基于以上模型,我们能够更深入理

    rocketmq:来自阿里巴巴的叉子

    RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:支持严格的消息顺序支持Topic与Queue两种模式亿级消息堆积能力比较友好的分布式特性同时支持Push与Pull方式消费消息历经多次天猫双十一海量消息考验如何...

    大厂面试专栏,冲击大厂必备

    第一篇:JAVA 基础那点破事!反射、泛型、IO模型、重载、非阻塞 第二篇:JAVA 集合那点破事!集合、扩容、数组、链表 第三篇:JAVA 并发!JUC、死锁、CAS、线程池 第四篇:JVM 那点破事!...顺序消费、堆积、事务

Global site tag (gtag.js) - Google Analytics