RabbitMQ------ACK确认机制
一。介绍
1.消费者从RabbitMQ收到消息并处理完成后,反馈给RabbitMQ,RabbitMQ收到反馈后才将此消息从队列中删除
2.消费者在处理消息出现了网络不稳定、服务器异常等现象,那么就不会有ACK反馈,RabbitMQ会认为这个消息没有正常消费,会将消息重新放入队列中
3.只有当消费者正确发送ACK反馈,RabbitMQ确认收到后,消息才会从RabbitMQ服务器的数据中删除。
4.消息的ACK确认机制默认是打开的,消息如未被进行ACK的消息确认机制,这条消息被锁定Unacked
二。确认方式
1.自动确认(默认)
2.手动确认 manual
spring:
rabbitmq:
#开启手动确认消息
listener:
simple:
acknowledge-mode: manual
3.两种方式区别
转载:
非常好理解的推文
https://www.cnblogs.com/refuge/p/10356750.html
三。deliveryTag介绍
表示消息投递序号,每次消费消息或者消息重新投递后, deliveryTag都会增加
四。basicNack和basicReject介绍
1.basicReject一次只能拒绝接收一个消息,可以设置是否requeue。
2.basicNack方法可以支持一次0个或多个消息的拒收,可以设置是否requeue。
用处举例:
人工审核异常消息:
设置重试阈值,超过后确认消费成功,记录消息,人工处理
代码:
部分代码可参考:
https://www.cnblogs.com/tianhengblogs/p/15341670.html
https://www.cnblogs.com/tianhengblogs/p/15342226.html

import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.io.IOException; @Component @RabbitListener(queues = "order_queue") public class OrderMQListener { /** * body: 接收onvertAndSend(String exchange, String routingKey, Object object)的order消息 * * */ @RabbitHandler public void messageHandler(String body, Message message, Channel channel) throws IOException { long msgTag = message.getMessageProperties().getDeliveryTag(); System.out.println("body: " + body); System.out.println("msgTag: " + msgTag); System.out.println("message: " + message.toString()); //告诉broker(消息队列服务器实体),消息已经被确认 channel.basicAck(msgTag, false); //告诉broker,消息拒绝确认(可以拒绝多条,把比当前msgTag值小的也拒绝) // channel.basicNack(msgTag, false, true); //告诉broker,消息拒绝确认(只能拒绝当前msgTag的这条) // channel.basicReject(msgTag, true); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架