RabbitMQ系列(五)基本概念之Queue
在 RabbitMQ 中,Queue(队列) 是存储消息的容器,也是消息传递的核心载体。以下是其核心特性与作用的全方位解析:
一、Queue 的定义与核心作用
- 消息存储容器
- Queue 是 RabbitMQ 中实际存储消息的实体,生产者发送的消息最终会被路由到队列中,等待消费者处理。
- 类比:类似于“邮箱”,消息在队列中按顺序排列,消费者按需读取。
- 消费者与消息的解耦
- 生产者仅需关注将消息发送到 Exchange(交换机),无需关心消费者数量和消费速度;消费者独立从队列中拉取或接收推送的消息,从而做到和生产者和Exchange的解耦。
二、Queue 的核心特性
1. 消息持久化
- 如果希望 RabbitMQ 服务重启后,队列及其中的消息仍会保留(需要将消息本身也标记为持久化),那么可以将队列可声明为 持久化(Durable)。
- 非持久化队列 会在服务重启后自动删除。
2. 消息顺序性
- 队列中的消息默认按 先进先出(FIFO) 顺序被消费,但优先级队列(Priority Queue)可支持按优先级处理消息。
3. 消费者订阅方式
- 推送模式(Push):消费者通过
basic.consume订阅消息队列,消息会自动推送给消费者。 - 拉取模式(Pull):消费者通过
basic.get主动拉取消息,适用于低频消费场景,比如出发接口主动刷新获取最新消息。
4. 消息确认机制(ACK)
- 消费者处理消息后需发送 ACK 确认(ACK是acknowledge的缩写,意为确认),RabbitMQ 才会从队列中删除消息;若未确认或连接中断,消息会重新入队或根据配置转移到死信队列。
三、Queue 的生命周期与配置
- 队列声明参数
exclusive:是否为独占队列(仅允许当前连接访问,连接关闭后队列自动删除)。auto-delete:如果设置为true,当最后一个消费者断开连接后,队列会自动删除,否则相反。
- 队列绑定规则
- 队列需通过 Binding(绑定) 与 Exchange 关联,并指定 Routing Key(路由键),由 Exchange 根据类型(如 Direct、Fanout)决定消息如何路由到队列。
- 示例:Fanout Exchange 会将消息广播到所有绑定的队列,Topic Exchange 支持通配符匹配路由键。
四、Queue 的权限与隔离
- Virtual Host 隔离:队列隶属于某个 Virtual Host,不同 Virtual Host 中的队列完全隔离,用户需授权才能访问。
- 多租户支持:适用于多团队/多环境场景,避免命名冲突。开发、测试和生产不同的环境可以考虑使用不同的virtual host来解决
五、典型应用场景
- 任务队列:将耗时任务(如邮件发送)异步处理,提升系统响应速度。
- 发布/订阅模式:结合 Fanout Exchange 实现消息广播。
- 延迟队列:通过死信队列(Dead Letter Queue)实现消息延迟处理(如订单超时关闭)。
- 流量削峰:在高并发场景下缓冲请求,避免系统过载。
六、操作示例
// 声明一个持久化队列(若不存在则创建)
channel.queueDeclare("order_queue", true, false, false, null);
// 绑定队列到交换机,指定路由键
channel.queueBind("order_queue", "direct_exchange", "order.create");
总结对比
| 特性 | 说明 |
|---|---|
| 持久性 | 决定队列和消息是否在服务重启后保留 |
| 独占性 | 控制队列是否仅限当前连接访问 |
| 自动删除 | 根据消费者连接状态自动清理队列 |
| 消息确认机制 | 确保消息可靠消费,避免丢失 |
通过合理配置队列属性和绑定规则,可实现灵活的消息处理逻辑,满足不同业务场景需求。
相关文章:
RabbitMQ系列(五)基本概念之Queue
在 RabbitMQ 中,Queue(队列) 是存储消息的容器,也是消息传递的核心载体。以下是其核心特性与作用的全方位解析: 一、Queue 的定义与核心作用 消息存储容器 Queue 是 RabbitMQ 中实际存储消息的实体,生产者…...
【记录】成为创作者的第 730 天(两年)
收获 还是总在感叹走到今天收获的一切,都是自己曾经不敢想的。 无论是靠自己努力拿到的 Offer,还是在 CSDN 网站上结交的网友和前辈们,都是我莫大的荣幸和财富,感恩一切、感恩自己。 过去一年的收获真的数不胜数,抛…...
深度剖析数据分析职业成长阶梯
一、数据分析岗位剖析 目前,数据分析领域主要有以下几类岗位:业务数据分析师、商业数据分析师、数据运营、数据产品经理、数据工程师、数据科学家等,按照工作侧重点不同,本文将上述岗位分为偏业务和偏技术两大类,并对…...
【XSS】DVWA靶场XSS攻击
一、XSS攻击 1.1. XSS 攻击简介 XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web安全漏洞,它允许攻击者在受害者的浏览器中执行恶意脚本。攻击者通常通过在Web应用程序中注入恶意脚本代码(如JavaScript&…...
Fiddler在Windows下抓包Https
文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量(可选)解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下,Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密: 1…...
04 路由表的IP分组传输过程
目录 1、路由表的核心结构 2、IP分组传输过程和数据包转发过程 2.1、IP分组传输过程 2.2、数据包转发过程 2.3、IP分组传输过程和数据包转发的区别 3、数据包的变化 3.1、拓扑结构 3.2、传输过程详解(主机A → 主机B) 3.2.1、主机A发送数据 3.2…...
AI Agent 定义与核心要素详解
AI Agent(人工智能代理)是一种能够感知环境、自主决策并执行任务以达成目标的软件实体。它结合了感知、推理、学习和行动能力,能够在复杂环境中独立或协作工作。以下是其核心要素: 1. 感知 AI Agent 通过传感器或数据输入感知环…...
记忆化搜索与动态规划:原理、实现与比较
记忆化搜索和动态规划是解决优化问题的两种重要方法,尤其在处理具有重叠子问题和最优子结构性质的问题时非常有效。 目录 1. 记忆化搜索(Memoization) 定义: 实现步骤: 示例代码(斐波那契数列࿰…...
在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南
随着人工智能技术的飞速发展,本地部署大型语言模型(LLM)已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私,还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2(24GB 内存)上部署 DeepS…...
计算机网络基础简答题资料(对口高考)
1、什么是计算机网络?计算机网络的功能有哪些? 答案:计算机网络,是指将分布在不同地理位置、具有独立功能的多台计算机及其外围设备,通过通信设备和通信线路连接起来,在网络操作系统、网络管理软件及网络通…...
mysql内置工具导入csv包,简单便捷高效
先创建一个你想要的数据库 create database uba; 分析导入文件的格式内容 提前在数据库里创建你需要的表格 不然就会收到”mysqlimport: Error: 1146“大礼包 (你的csv文件名和表格名字一摸一样,大小写也是) use uba; create table userBehavior (us…...
【汽车ECU电控数据管理篇】HEX文件格式解析篇章
一、HEX格式文件是啥 HEX 文件是 Intel 公司提出的一种按地址排列的数据信息格式,通常用于存储嵌入式系统的二进制代码。它以 ASCII 码的形式记录数据,每一行以冒号开头,包含数据长度、地址、记录类型、数据和校验码等信息。HEX 文件常用于程…...
SOLID Principle基础入门
(Robert C. Martin (Uncle Bob)) 什么是SOLID原则? SOLID原则是面向对象编程(OOP)中编写高质量代码的指导方针。实际上,即使不使用SOLID原则,仅通过类、继承、封装和多态性,也可以让程序正常运行。那么为…...
keil主题(vscode风格)
#修改global.prop文件,重新打开keil即可 # Keil uVision Global Properties File # This file is used to customize the appearance of the editor# Editor Font editor.font.nameConsolas editor.font.size10 editor.font.style0# Editor Colors editor.backgro…...
微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...
大模型使用
prompt生成bot 角色:你扮演一个帮助用户生成大模型prompt内容的角色,不要直接回答问题,而是帮助用户生成prompt 任务:根据用户的输入,分析用户意图,与用户进行多轮沟通,最后根据对话形成最终的prompt 指令:最终形成的prompt必须包含以下6个方面: 1.所有三个引号之间的内容原样输…...
ISP 常见流程
1.sensor输出:一般为raw-OBpedestal。加pedestal避免减OB出现负值,同时保证信号超过ADC最小电压阈值,使信号落在ADC正常工作范围。 2. pedestal correction:移除sensor加的基底,确保后续处理信号起点正确。 3. Linea…...
SpringBoot原理-02.自动配置-概述
一.自动配置 所谓自动配置,就是Spring容器启动后,一些配置类、bean对象就自动存入了IOC容器当中,而不需要我们手动声明,直接从IOC容器中引入即可。省去了繁琐的配置操作。 我们可以首先将spring项目启动起来,里面有一…...
小红书自动评论
现在越来越多的人做起来小红书,为了保证自己的粉丝和数据好看,需要定期养号。 那么养号除了发视频外,还需要积极在社区互动,比如点赞、评论等等,为了节省时间,我做了一个自动化评论工具。 先看效果 那这个是…...
CosyVoice2整合包 特殊声音标记,声音克隆更逼真,新增批量生成
新增批量生成,可用于制作直播话术音频 特殊声音标记 符号示例1_语气加强<strong> </strong>每天都<strong>付出</strong>和<strong>精进</strong>,才能达到巅峰。2_呼吸声[breath][breath] 吸气,[breath] 呼气! [breath] 吸,[b…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
