`
m635674608
  • 浏览: 5027371 次
  • 性别: 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

分享到:
评论

相关推荐

    RocketMQ消息队列资料

    事务消息可以保证消息的最终一致性,而顺序消息则能保证消息的顺序消费,这对于许多业务逻辑至关重要。 4. **轻量级框架**:RocketMQ的客户端库小巧,易于集成到各种应用中,同时提供了丰富的API,开发者可以快速...

    RocketMQ消息队列demo

    - **消息拉取**:消费者通常采用Pull方式从队列中拉取消息,或者使用Push模式,让RocketMQ服务器主动推送消息到消费者。 3. ** RocketMQ的高级特性 ** - **事务消息**:RocketMQ支持事务消息,确保消息发送与...

    RocketMQ分布式消息队列

    消息堆积:Producer已经将消息发送到消息队列RocketMQ的服务端,但由于Consumer消费能力有限,未能在短时间内将所有消息正确消费掉,此时在消息队列RocketMQ的服务端保存着未被消费的消息,该状态即消息堆积。...

    RocketMq消息队列实施计划方案_.doc

    此外,对消费端进行优化,处理消息重复和保证消费顺序也是必不可少的步骤。 总结来说,实施RocketMQ消息队列方案需要综合评估业务需求、系统性能、容错策略以及团队的技术栈,选择最佳的部署模式,并确保在整个生命...

    rocketmq消息队列

    4. 顺序消息:对于对消息顺序有严格要求的应用,RocketMQ提供了一种保证消息全局有序的功能。 5. 分布式事务:RocketMQ支持分布式事务,使得跨多个服务的事务操作成为可能。 6. 延迟与定时消息:用户可以设置消息的...

    阿里 Rocketmq4.2 安装包下载

    - **顺序消息**:在特定的Topic下,RocketMQ能够保证消息的严格顺序,这对于处理交易流水等对顺序有严格要求的业务非常关键。 - **延迟消息**:用户可以设置消息的延迟时间,使得消息在指定的时间后才被消费,提高...

    消息队列-RocketMQ1

    RocketMQ支持顺序消费,每个topic下的四个队列可用于实现顺序消息处理。此外,它还解决了分布式事务的问题,例如在银行转账场景中保证数据一致性。通过预处理消息、提交本地事务,然后发送确认消息来确保事务一致性...

    基于Spring Boot和RocketMQ的动态ZooKeeper节点管理与消息队列系统.zip

    同时,通过RocketMQ实现了消息的生产和消费,支持并发和顺序消费模式。 项目的主要特性和功能 1. ZooKeeper节点管理 动态创建、更新和删除ZooKeeper节点。 监听ZooKeeper节点的子节点变化,并实时处理节点变化...

    Android代码-advanced-java

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

    RocketMQ实践:确保消息不丢失与顺序性的高效策略

    3. **Group消费策略**:消费者组内的每个消费者只负责一部分队列,保证每个消费者消费的消息是连续的,实现顺序消费。 4. **公平消费**:在多消费者场景下,RocketMQ可以通过公平消费策略,让每个消费者按照消息...

    分布式消息队列RocketMQ.pdf

    分布式消息队列RocketMQ是阿里巴巴开源的一款高性能、高可用、高可扩展的分布式消息中间件。它在设计上遵循了消息队列的基本理念,提供了一种异步解耦和削峰填谷的能力,使得系统之间的通信更加高效和稳定。本资料...

    RocketMQ学习及V3.2.4最新开发指南

    2. 消费者(Consumer):消费者是消息的接收方,从RocketMQ的队列中消费消息。 3. 主题(Topic):主题类似于分类,多个生产者可以向同一个主题发布消息,多个消费者可以订阅同一个主题。 4. 队列(Queue):每个...

    rocketmq-all-4.9.3-bin-release

    5. **消息顺序**:RocketMQ提供严格的消息顺序保证,通过指定消息的队列和发送策略,可以确保消息按照特定的顺序被消费。 6. **消息分发策略**:RocketMQ支持广播(Broadcasting)和集群(Clustering)两种消费模式...

    Java 工程师进阶知识完全扫盲

    消息队列的其他知识点包括消息消费的幂等性、消息传输的可靠性、消息的顺序性等。 本文对消息队列技术的知识点进行了深入探讨,涵盖了消息队列的使用场景、优点和缺点、种类和比较、高可用性和可靠性等方面。 Java ...

    rocketmq 开发规范 精讲 精华部分

    1. 幂等性消费:由于RocketMQ不能完全保证Exactly-Once,业务层面需实现消息去重机制。 2. 提高消费效率: - 增加Consumer实例数量以提升并行度。 - 调整`consumeThreadMin`和`consumeThreadMax`,增加单个...

    rocketmq源码.zip

    5. 高效的刷盘策略:RocketMQ采用异步刷盘和顺序写磁盘技术,保证了高吞吐量和低延迟。 三、RocketMQ的实现机制 1. 消息确认:Pull Consumer在拉取消息后需要向Broker发送确认,而Push Consumer则由Broker在消息...

    RocketMQ学习文档

    3. **队列模型**:RocketMQ采用队列模型进行消息传递,消息被分发到不同的主题(Topic)下,每个主题可以有多个消费队列(Queue)。消息生产者将消息发送到队列,消费者则从队列中消费消息。这种模型保证了消息的...

    RocketMQ_UML图示说明

    - ConsumeMessageOrderlyService:顺序消费消息服务,用于顺序消费消息。 10. **消息存储**: - LocalFileOffsetStore:本地文件偏移存储,用于存储消息在本地文件中的偏移量。 - RemoteBrokerOffsetStore:远程...

    rocketmq-dashboard.zip

    RocketMQ Dashboard提供了图形化界面,使得用户可以方便地监控RocketMQ集群的状态,包括消费、生产、队列等信息,以及进行相应的管理操作。 RocketMQ的核心功能包括: 1. **消息发布与订阅**:RocketMQ支持发布/...

Global site tag (gtag.js) - Google Analytics