`
fuhuijun
  • 浏览: 32071 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rabbitmq消息重排序分析

    博客分类:
  • MQ
 
阅读更多

一、场景描述

        使用过rabbitmq的同学都知道,客户端在返回Nack时有一个requeue参数,标明是否需要重新排队,没错,的确是这样的。我当时也这么想,可后来进一步思考,到底是放入服务端队列,还是在本地队列呢?

        首先确认以下2点:

        1、如果是放入服务端队列,那么服务端broker的消息会不断增加,应该不可能

        2、消费端断开连接重连后,再次消费消息时,消息还是从队头开始消费

 

带着疑问,做了一个demo测试一下。

 

二、过程分析

1、消费端暂且设置qos=5,即服务端会向消费端一次性投递5条消息


 

 

 

 

2、Consumer消费完0后返回ACK,Broker会删除对应的消息0

 

 

 

 

 

3、继续消费1时,消费端发生了异常并且捕获异常后返回了Nack,且requeue=true

 

大家可以看到,消费端消息消费失败后尝试重新排队,此时消息1回到了本地队列的尾部

 

 

4、继续消费2时,消费端又发生了异常并且捕获异常后返回Nack,且requeue=true


 

此时消息2回到了本地队列的尾部

 

 

5、继续消费3后返回Ack,Broker和Consumer中的消息3都被删除



注意:如果本地队列中存在未消费完的消息,那么RabbitMQ服务端不会继续投递消息

 

三、总结

返回Nack且requeue为true时,重新排队是在消费端完成的,对Broker中的队列和消息没有影响
  • 大小: 10.3 KB
  • 大小: 9.5 KB
  • 大小: 9.5 KB
  • 大小: 9.5 KB
  • 大小: 9.3 KB
分享到:
评论

相关推荐

    MQ选型之RabbitMQ

    - **消息排序**:支持消息的有序传输。 - **问题追踪**:便于调试和问题定位。 - **可视化管理工具**:方便管理和监控系统状态。 - **插件系统**:可通过插件扩展功能。 在这些方面,**RabbitMQ和Kafka表现最佳**,...

    消息中间件kafka与activemq、rabbitmq、zeromq、rocketmq的比较

    - **高级特性**: 支持事务处理、消息优先级排序等高级功能。 - **多协议支持**: 支持AMQP、STOMP、MQTT等多种协议。 - **易用性**: 提供了丰富的客户端库,方便不同编程语言的应用集成。 - **适用场景**: - ...

    Dubbo+Solr+RabbitMQ实现Solr数据同步 DataSyncParent.zip

    2. **可靠传输**:RabbitMQ提供消息确认机制,确保消息不会丢失或重复。 3. **异步处理**:数据同步过程可以通过消息队列异步处理,避免阻塞主业务流程,提高系统响应速度。 在“Dubbo+Solr+RabbitMQ实现Solr数据...

    android即时通讯消息推送包含服务端和客户端

    3. 使用消息队列(Message Queue,如RabbitMQ或Kafka)来处理并发请求和消息缓存,确保消息的可靠传递。 4. 服务端还需要实现鉴权机制,如OAuth2.0,确保用户身份安全。 二、客户端实现 1. 客户端使用Android SDK...

    09_我该怎么保证从消息队列里拿到的数据按顺序执行?.zip

    3. 顺序队列:部分消息队列服务提供了顺序队列功能,如RabbitMQ的TTL和Priority,AWS SQS的FIFO队列,它们能保证消息的顺序消费。 4. 一致性哈希:利用一致性哈希算法,将具有相同属性(如用户ID)的消息路由到同一...

    Message Pipe分布式消息顺序消费管道 v1.0.6.zip

    4. **框架与库**:Message Pipe可能会依赖于某些开源框架和库,如Apache Kafka、RabbitMQ等消息中间件,或者使用了Spring Boot、Docker等开发和部署工具,这些都可能在源码中体现。 5. **测试用例**:为了保证代码...

    Docker基于ElasticSearch全文搜索引擎的旅游景点搜索网设计

    开发环境: Idea + Mysql + ...其中管理员对酒店维护的时候,因为修改了mysql数据库里面酒店的信息,这样就需要把酒店的最新信息同步到全文搜索引擎中,这里采用了RabbitMQ作为消息中间件实现了它们之间的解耦合。

    C#站内数据统计代码

    7. **实时统计**:如果需要实时更新的统计数据,可以使用消息队列(如RabbitMQ或Azure Service Bus)和微服务架构。每当有新的数据产生,就发布到消息队列,后台服务订阅并处理这些消息,实时更新统计结果。 8. **...

    Java后端开发+Java中级面试题

    Java后端开发面试题涉及到多个核心领域,包括Redis的使用场景和持久化机制、Docker与虚拟机的区别、MySQL调优、以及消息队列RabbitMQ的基础知识。下面将逐一详细解析这些知识点。 1. Redis应用场景: - a. 数据...

    Understanding the implementation of IEEE MAC 802.11 standard in NS-2

    - **类状态**:包括所有节点的列表(`MobileNode*xListHead_`)、节点数量(`numNodes_`)、是否已排序(`sorted_`)以及载波侦听阈值距离(`distCST_`)等。 - **功能**:尽管`WirelessChannel`继承自`Channel`,但在NS-2的...

    2004-2009年软件设计师试题及答案(全) 考前练兵

    3. **数据结构与算法**:链表、树、图、栈、队列等基本数据结构,以及排序、查找、递归等常见算法的实现和分析。 4. **操作系统原理**:进程与线程管理、内存管理、文件系统、设备管理等基础知识,理解操作系统的...

    汇联金科面试Java高级工程师

    7. **缓存与消息队列**:熟悉缓存系统(如Redis、Memcached)和消息队列(如RabbitMQ、Kafka)的使用,理解它们在系统中的作用和优化方法。 8. **UML与面向对象设计**:掌握面向对象分析设计思想,能使用ROSE或...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    RabbitMQ topic细致的消息过滤广播模式 Redis string操作 RabbitMQ rpc实现 Redis hash操作 Redis 集合set 和有序集合操作 Redis 集合操作补充 Redis 发布订阅及本节作业 第12周 上节回顾 数据库介绍 mysql基本...

    为了跳槽对java 全盘复习,覆盖,jvm 数据结构,集合框架,一些算法,spring全家桶

    4. 算法:算法是解决问题的步骤和方法,如排序(快速排序、归并排序、冒泡排序等)、查找(二分查找、哈希查找等)、图算法(Dijkstra、Floyd等)。熟练掌握各种算法有助于提升代码质量和运行效率。 5. Spring全家...

    JAVA架构师核心面试知识整理新-加密.pdf

    Java架构师的核心面试知识涉及到多个领域,包括JVM与性能优化、并发编程、Spring和MyBatis框架、分布式服务如Dubbo、消息队列RabbitMQ以及数据库和设计模式等。以下是对这些知识点的详细说明: 1. **JVM与性能优化*...

    java面试宝典,包含java基础篇、多线程、spring、springboot、mysql、redis、mq等等经典面试问题

    - Volatile关键字:内存可见性,禁止指令重排序。 3. **Spring框架**: - AOP:面向切面编程的基本概念,切点、通知、代理的理解。 - IoC:控制反转,依赖注入的实现方式。 - Spring Bean的生命周期:初始化、...

    阿里巴巴面试题

    - 分布式缓存(如Redis、Memcached)和消息队列(如Kafka、RabbitMQ)。 - 分布式计算框架(如Hadoop、Spark)。 - 负载均衡和集群技术。 7. 云计算: - IaaS、PaaS、SaaS的定义及区别。 - 云计算架构(如AWS...

Global site tag (gtag.js) - Google Analytics