尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

深入解析:【RabbitMQ】- Channel和Delivery Tag机制

深入解析:【RabbitMQ】- Channel和Delivery Tag机制
📅 发布时间:2026/6/18 18:20:57

深入解析:【RabbitMQ】- Channel和Delivery Tag机制

在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。

Channel 参数

作用

Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互:

  • 手动消息确认:通过 basicAck/basicNack 显式告知 RabbitMQ 消息处理结果
  • 流量控制:可调用 basicQos 限制预取消息数量(防止消费者过载)
  • 其他高级操作:如消息重发、队列绑定等

如果不传入 Channel,Spring AMQP 会自动使用默认信道,但会失去对信道的直接控制权。

对应原理

在这里插入图片描述
在这里插入图片描述

生产者的 Channel

  • 当生产者调用 rabbitTemplate.convertAndSend() 时:
rabbitTemplate.convertAndSend("doctor.queue"
, jsonMessage)
;
  • Spring AMQP 内部会从 连接池 获取一个 Channel(信道)。
  • 该 Channel 用于将消息发布到指定队列。
  • 发布后自动关闭(如果是非事务模式)或复用。

消费者的 Channel

  • 消费者通过 @RabbitListener 监听队列时:
@RabbitListener
(queues = "doctor.queue"
)
public
void onMessage(String json, Channel channel, @Header
(AmqpHeaders.DELIVERY_TAG
)
long tag) {
// 处理逻辑
}
  • Spring AMQP 会为每个消费者线程分配一个 独立的 Channel。
  • 所有消息的确认(ACK/NACK)必须通过 同一个 Channel 操作(否则会报错)。

tag 参数

作用

@Header(AmqpHeaders.DELIVERY_TAG) 注入的 tag 是消息的唯一标识符:

  • 消息指纹:每个投递给消费者的消息都会获得唯一的 delivery tag
  • 幂等性设计:通过 tag 可以精确确认/拒绝特定消息
  • 必须参数:调用 basicAck/basicNack 时必须指定此 tag

Tag 的数值范围仅在当前信道内唯一,不同信道的 tag 可能重复。

对应原理

Tag 的生成

  • 当 RabbitMQ 将消息推送给消费者时:
    • 服务端会为 每条消息 分配一个唯一的 Delivery Tag(在当前 Channel 内递增)。
    • 例如:第一次推送的 Tag=1,第二次 Tag=2,…(不同 Channel 的 Tag 独立计数)。

Tag 的作用

  • 唯一标识消息:消费者通过 Tag 告诉 RabbitMQ 要确认/拒绝哪条消息。
channel.basicAck(tag, false
)
;
// 确认当前消息
channel.basicNack(tag, false
, true
)
;
// 拒绝并重新入队
  • 严格顺序性:Tag 在同一个 Channel 内严格递增,确保消息顺序处理。
  • RabbitMQ 服务端维护了一个 消息投递状态表,记录每个 Channel 的 Tag 对应哪条消息。
  • 当消费者发送 ACK/NACK 时,RabbitMQ 根据 Channel + Tag 组合定位到原始消息。

手动确认模式

手动确认模式的优点:

  • 可靠性:只有处理成功的消息才会被确认(basicAck)
  • 错误恢复:处理失败时通过 basicNack 让消息重新入队
  • 业务控制:可以根据业务逻辑决定是否确认(如示例中的 shouldBeProcessed 判断)
// 成功处理 - 确认删除
channel.basicAck(tag, false
)
;
// 处理失败 - 拒绝并重新入队
channel.basicNack(tag, false
, true
)
;

工作流程

在这里插入图片描述

相关新闻

  • 调用百度AI接口实现网络图片中的文字识别
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器 - 指南
  • 实用指南:React 组件异常捕获机制详解

最新新闻

  • 5个技巧让SmartSystemMenu成为你的Windows窗口管理神器![特殊字符]
  • windows10/11安装scoop
  • 新加坡2026八家优选留学机构全面测评,本地化哪家性价比更高? - 资讯速览
  • PC无法读取SD卡并提示格式化的修复方法
  • 39钝刀工艺:让篆刻白文重现金石苍劲之美 - 资讯焦点
  • 2026年投票制作平台怎么选 五家服务商横向对比供参考 - 深度智识库

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号