一、场景描述
使用过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消息中间件技术精讲,RabbitMQ消息中间件技术精讲实战教程
RabbitMQ消息中间件技术精讲
RabbitMQ消息服务用户手册
RabbitMQ消息中间件视频无加密教程,包括消息中间件的多个企业级应用场景案例详解
rabbitmq 实现消息插队,以多人投资为例子,手动投资优先于自动投资都进入消息队列,进行消息插队处理
golang 推送系统 单机 客户端通过websocket连接到服务端 ...服务端从rabbitmq接收消息,根据消息所属通过websocket推送到具体用户 服务端从http api接收消息,根据消息所属通过websocket推送到具体用户
功能说明:网页端直接消费rabbitmq的消息 环境准备:先安装好rabbitmq。 要配置插件:与前端对接,需要在RabbitMQ上启动rabbitmq_web_stomp插件 ,命令:./rabbitmq-plugins enable rabbitmq_web_stomp 1、...
理解Confirm消息确认机制 消息的确认,是指生产者投递消息后,如果Broker收到消息,则会给我们生产者一个应答。生产者进行接收应答,用来确定这条消息是否正常的发送到Broker,这种方式也是消息的可靠性投递的核心...
RabbitMQ流量控制机制分析1
RabbitMQ消息中间件技术精讲(包含源码等) RabbitMQ消息中间件技术精讲(包含源码等) RabbitMQ消息中间件技术精讲(包含源码等)
SpringBoot整合RabbitMq,简单的实现消息的生产与消费,可发送消息到rabbitMq,可实时接收消息。适合初学者。
SpringBoot集成RabbitMQ消息中间件的使用。消息管理中心,消息提供方,消息消费方,并实现消息提供返回的ack校验以及借用redis完成消息补偿机制。
golang版本的RabbitMQ消息订阅的封装,可以多个生产者,多个消息订阅者,每个队列可以创建多个协程处理; 可能有些消费者需求需要分布式部署,那需要指定队列名,并且需要设置队列持久化,以及排他性QueueDeclare....
用PHP收发RabbitMQ消息,分为send.php存入消息队列和get.php从消息队列中取出并处理。取出采用阻塞模式,需要在命令行下运行。
SpringBoot整合RabbitMQ 实现消息发送确认与消息接收确认机制 源码及教材 可以参考博客: https://blog.csdn.net/qq_29914837/article/details/93376741
windows下安装RabbitMQ消息服务器
RabbitMQ消息中间件面试专题.pdf
RabbitMQ (二)结合springboot实现消息重试.pdf