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

news/2025/10/6 15:18:43/文章来源:https://www.cnblogs.com/ljbguanli/p/19127637

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

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

Channel 参数

作用

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

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

对应原理

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

生产者的 Channel

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

消费者的 Channel

@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 是消息的唯一标识符:

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

对应原理

Tag 的生成

Tag 的作用

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

手动确认模式

手动确认模式的优点:

// 成功处理 - 确认删除
channel.basicAck(tag, false
)
;
// 处理失败 - 拒绝并重新入队
channel.basicNack(tag, false
, true
)
;

工作流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:vulkan游戏引擎renderer_frontend实现

实用指南:vulkan游戏引擎renderer_frontend实现2025-10-06 15:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

2020CSPS T1 儒略日题解

这是一道超级大模拟 前后调了差不多3个小时,要是考场上那就已经炸了 题意其实很简单,但是处理起来是真的麻烦 最后写了份特别丑的代码,A过去了 主要是特例判的恶心,总是会有1月0日的错误 这题一定要耐住性子做下来…

在线教育网站建设公司网站建设价格低

目录 ansible 环境安装部署 管理端安装 ansible ansible 目录结构 配置主机清单 配置密钥对验证 ansible 命令行模块 1.command 模块 2.shell 模块 3.cron 模块 4.user 模块 5.group 模块 6.co…

调用百度AI接口实现网络图片中的文字识别

之前也做过一些api调用的demo,一直是看API文档,向目标url发送请求,看看传哪些参数,接受哪些参数。 API平台:https://ai.baidu.com 这次使用HTTP-SDK文档。那么两者的区别是什么呢? API 文档告诉你服务的“功能”…

Golang|分布式搜索引擎中所使用到的设计模式 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Python 语言编程技巧

Python 语言编程技巧__name__ == “__main__” 这个表达式可用于判断当前模块是最先运行的模块,还是被导入的模块。def main() -> None:...if __name__ == __main__:# 直接运行当前文件时执行。main()

kafka 常用知识点 - 指南

kafka 常用知识点 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

做神马网站快公司logo形象墙效果图

win --> cmd 右键以管理员运行 --> regedit 进入注册表 --> 找到你要删除的值的所属文件夹 --> 右键权限 -->修改为完全控制

汽车工厂网站建设wordpress布局模板

1 简单的表单校验 <!--uniapp:参考模板和字段生成页面 字段stuNumber 输入框 学号stuName 输入框 学生姓名teacher 输入框 辅导员submitDate 日期选择 填报日期morningTemperature 输入框&#xff08;数字校验一位小数&#xff09; 早上体温noonTemperature 输入框&…

长沙中小企业做网站写网站的教程

PHP CURL内存泄露的解决方法curl配置平淡无奇&#xff0c;长时间运行发现一个严重问题&#xff0c;内存泄露&#xff01;不论用单线程和多线程都无法避免&#xff01;是curl访问https站点的时候有bug&#xff01;内存泄露可以通过linux的top命令发现&#xff0c;使用php函数mem…

英语_阅读_ChatGPT_待读

What Do You Say at the Altar? Let ChatGPT Decide Molly Price and Erik Sorensen are getting married in October. 莫莉普赖斯和埃里克索伦森将在十月结婚。 AI is helping with the details. 人工智能正在帮助处…

在制作网站前 不需要急于做的工作是用html做的美食网站

CHS_01.2.1.12.1.3进程的概念、组成、特征 进程进程的概念 进程的组成——PCB进程的组成——PCB进程的组成——程序段、数据段知识滚雪球&#xff1a;程序是如何运行的&#xff1f;进程的组成进程的特征 知识回顾与重要考点 从这个小节开始 我们会正式进入第二章处理机管理相关…

首码项目推广网站网站代理公司

文章目录深度学习之卷积神经网络链式反向梯度链式法则的计算神经网络中链式法则实例二、卷积神经网络-卷积层&#xff08;一&#xff09;什么是卷积层&#xff08;二&#xff09;有什么组成受什么影响&#xff0c;有何特点卷积网络正向传播反向传播卷积和神经网络功能层深度学习…

高端网站建设 房产wordpress屏蔽右键并提示

LAG 和 LEAD函数简介 Hive 中的 LAG 和 LEAD 函数时&#xff0c;通常用于在结果集中获取同一列在前一行&#xff08;LAG&#xff09;或后一行&#xff08;LEAD&#xff09;的值。这在分析时间序列数据、计算变化率或查找趋势时非常有用。以下是这两个函数的用法示例&#xff1…

QT开发技术【ffmpeg + QAudioOutput】音乐播放器 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

长春网站建设哪里好杭州软件开发培训学校

场景描述 安装系统时可以进入安装界面&#xff0c;但是无法识别到硬盘&#xff0c;查看服务器硬件均无异常且从bios或者raid配置界面中能正常看到raid信息及硬盘信息&#xff0c;运行lspci 命令查看到服务器有raid卡&#xff0c;但是未加载驱动。 获取驱动程序模块 查看raid…

进程工具类 - C#小函数类推荐

进程工具类 - C#小函数类推荐Posted on 2025-10-06 14:51 lzhdim 阅读(0) 评论(0) 收藏 举报/***进程工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim@163.comBlog: http://lzhdi…

实用指南:React 组件异常捕获机制详解

实用指南:React 组件异常捕获机制详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

win11 为什么我的程序断网就转入导后台进程

win11 为什么我的程序断网就转入导后台进程this->lockdraw 去掉这个就好了

山东大禹建设集团网站263企业邮箱手机版登录

实验要求&#xff1a; 1.R2为ISP&#xff0c;只能配置IP 2.R1-R2之间为HDLC封装 3.R2-R3之间为PPP封装&#xff0c;pap认证&#xff0c;R2为主认证方 4.R2-R4之间为PPP封装&#xff0c;chap认证&#xff0c;R2为主认证方 5.R1、R2、R3构建MGRE&#xff0c;仅R1的IP地址固定…