一、场景描述
使用过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服务端不会继续投递消息
相关推荐
- **消息排序**:支持消息的有序传输。 - **问题追踪**:便于调试和问题定位。 - **可视化管理工具**:方便管理和监控系统状态。 - **插件系统**:可通过插件扩展功能。 在这些方面,**RabbitMQ和Kafka表现最佳**,...
- **高级特性**: 支持事务处理、消息优先级排序等高级功能。 - **多协议支持**: 支持AMQP、STOMP、MQTT等多种协议。 - **易用性**: 提供了丰富的客户端库,方便不同编程语言的应用集成。 - **适用场景**: - ...
2. **可靠传输**:RabbitMQ提供消息确认机制,确保消息不会丢失或重复。 3. **异步处理**:数据同步过程可以通过消息队列异步处理,避免阻塞主业务流程,提高系统响应速度。 在“Dubbo+Solr+RabbitMQ实现Solr数据...
3. 使用消息队列(Message Queue,如RabbitMQ或Kafka)来处理并发请求和消息缓存,确保消息的可靠传递。 4. 服务端还需要实现鉴权机制,如OAuth2.0,确保用户身份安全。 二、客户端实现 1. 客户端使用Android SDK...
3. 顺序队列:部分消息队列服务提供了顺序队列功能,如RabbitMQ的TTL和Priority,AWS SQS的FIFO队列,它们能保证消息的顺序消费。 4. 一致性哈希:利用一致性哈希算法,将具有相同属性(如用户ID)的消息路由到同一...
4. **框架与库**:Message Pipe可能会依赖于某些开源框架和库,如Apache Kafka、RabbitMQ等消息中间件,或者使用了Spring Boot、Docker等开发和部署工具,这些都可能在源码中体现。 5. **测试用例**:为了保证代码...
开发环境: Idea + Mysql + ...其中管理员对酒店维护的时候,因为修改了mysql数据库里面酒店的信息,这样就需要把酒店的最新信息同步到全文搜索引擎中,这里采用了RabbitMQ作为消息中间件实现了它们之间的解耦合。
7. **实时统计**:如果需要实时更新的统计数据,可以使用消息队列(如RabbitMQ或Azure Service Bus)和微服务架构。每当有新的数据产生,就发布到消息队列,后台服务订阅并处理这些消息,实时更新统计结果。 8. **...
Java后端开发面试题涉及到多个核心领域,包括Redis的使用场景和持久化机制、Docker与虚拟机的区别、MySQL调优、以及消息队列RabbitMQ的基础知识。下面将逐一详细解析这些知识点。 1. Redis应用场景: - a. 数据...
- **类状态**:包括所有节点的列表(`MobileNode*xListHead_`)、节点数量(`numNodes_`)、是否已排序(`sorted_`)以及载波侦听阈值距离(`distCST_`)等。 - **功能**:尽管`WirelessChannel`继承自`Channel`,但在NS-2的...
3. **数据结构与算法**:链表、树、图、栈、队列等基本数据结构,以及排序、查找、递归等常见算法的实现和分析。 4. **操作系统原理**:进程与线程管理、内存管理、文件系统、设备管理等基础知识,理解操作系统的...
7. **缓存与消息队列**:熟悉缓存系统(如Redis、Memcached)和消息队列(如RabbitMQ、Kafka)的使用,理解它们在系统中的作用和优化方法。 8. **UML与面向对象设计**:掌握面向对象分析设计思想,能使用ROSE或...
RabbitMQ topic细致的消息过滤广播模式 Redis string操作 RabbitMQ rpc实现 Redis hash操作 Redis 集合set 和有序集合操作 Redis 集合操作补充 Redis 发布订阅及本节作业 第12周 上节回顾 数据库介绍 mysql基本...
4. 算法:算法是解决问题的步骤和方法,如排序(快速排序、归并排序、冒泡排序等)、查找(二分查找、哈希查找等)、图算法(Dijkstra、Floyd等)。熟练掌握各种算法有助于提升代码质量和运行效率。 5. Spring全家...
Java架构师的核心面试知识涉及到多个领域,包括JVM与性能优化、并发编程、Spring和MyBatis框架、分布式服务如Dubbo、消息队列RabbitMQ以及数据库和设计模式等。以下是对这些知识点的详细说明: 1. **JVM与性能优化*...
- Volatile关键字:内存可见性,禁止指令重排序。 3. **Spring框架**: - AOP:面向切面编程的基本概念,切点、通知、代理的理解。 - IoC:控制反转,依赖注入的实现方式。 - Spring Bean的生命周期:初始化、...
- 分布式缓存(如Redis、Memcached)和消息队列(如Kafka、RabbitMQ)。 - 分布式计算框架(如Hadoop、Spark)。 - 负载均衡和集群技术。 7. 云计算: - IaaS、PaaS、SaaS的定义及区别。 - 云计算架构(如AWS...