当前位置: 首页 > news >正文

RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制

channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);  channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 

在RabbitMQ中,basicAckbasicNackbasicReject是三种核心的消息确认机制,作用及区别如下:


1. basicAck(成功确认)

  • 作用‌:明确告知RabbitMQ消息已成功处理,应从队列中移除。
  • 参数说明‌:
    • deliveryTag:消息唯一标识符(单调递增)。
    • multiple=false:仅确认当前消息(若为true则批量确认此前所有未确认消息)。
  • 示例场景‌:
    channel.basicAck(deliveryTag, false); // 确认单条消息处理成功 

2. basicNack(批量拒绝)

  • 作用‌:拒绝消息并支持批量操作,可选择是否重新入队。
  • 参数说明‌:
    • deliveryTag:消息标识符2。
    • multiple=false:仅拒绝当前消息(true则拒绝此前所有未确认消息)。
    • requeue=true:消息重新入队(false则丢弃或进入死信队列)。
  • 示例场景‌:
    channel.basicNack(deliveryTag, false, true); // 拒绝单条消息并重新入队 

3. basicReject(单条拒绝)

  • 作用‌:拒绝单条消息,功能类似basicNack但不支持批量操作。
  • 参数说明‌:
    • deliveryTag:消息标识符。
    • requeue=false:直接丢弃或进入死信队列(true则重新入队)。
  • 示例场景‌:
    channel.basicReject(deliveryTag, false); // 拒绝消息且不重新入队 

关键区别总结

方法批量支持重新入队控制典型用途
basicAck不适用成功处理后的确认
basicNack批量失败处理与重试
basicReject单条消息的立即拒绝

注意‌:

  • 若消息被拒绝且未重新入队,且队列配置了死信交换器(DLX),消息会路由至死信队列。
  • 自动确认模式(autoAck=true)下消息一旦接收即被视为确认,存在丢失风险。

相关文章:

  • 网络安全碎碎恋
  • Elasticsearch 集群升级实战指引—7.x 升级到 8.x
  • SRS流媒体服务器之本地测试rtc推流bug
  • 【HuggingFace】模型下载至本地访问
  • 【硬核数学】8. AI的“想象力”:概率深度学习与生成模型《从零构建机器学习、深度学习到LLM的数学认知》
  • 人工智能-基础篇-7-什么是大语言模型LLM(NLP重要分支、Transformer架构、预训练和微调等)
  • java:如何用 JDBC 连接 TDSQL 数据库
  • 【电路笔记 TMS320F28335DSP】TI SCI (增强型的UART) 点对点异步串行通信接口
  • 如何通过自动化减少重复性工作
  • Dify私有化知识库搭建并通过ChatFlow智能机器人使用知识库的详细操作步骤
  • Day46 通道注意力(SE注意力)
  • 第三次课:实验室安全用电
  • 【linux】文件与目录命令 - csplit
  • 将iso镜像文件格式转换为云平台支持的镜像文件格式
  • JavaScript基础pink[3]-函数/作用域/预解析
  • 【硬核数学】3. AI如何应对不确定性?概率论为模型注入“灵魂”《从零构建机器学习、深度学习到LLM的数学认知》
  • MCU、LIN收发器与LIN总线是如何进行交互的?
  • 设计模式(五)
  • php-m和phpinfo之间不一致的问题的可能原因和解决办法
  • 用SolidWorks 与 Arduino设计的一款简易小船