rabbitmq 交换机、队列和消息概念

RabbitMQ 是一个功能强大的消息中间件,它采用发布-订阅模式进行消息传递。下面为你详细介绍 RabbitMQ 中交换机、队列和消息的核心概念。

交换机(Exchange)

交换机在 RabbitMQ 中扮演着接收生产者发送消息的角色,它会根据特定的路由规则,将消息转发到对应的队列。你可以把交换机想象成一个邮局,当你把信件投入邮箱后,邮局会根据地址将信件分发给不同的邮递员,而这些邮递员就相当于队列。

交换机的主要类型

RabbitMQ 提供了多种类型的交换机,不同类型的交换机有不同的路由策略:

  • 直连交换机(Direct Exchange):依据消息的路由键(routing key),将消息路由到与之绑定键(binding key)相匹配的队列。
  • 扇形交换机(Fanout Exchange):会把接收到的消息广播到所有与之绑定的队列,完全不考虑路由键。
  • 主题交换机(Topic Exchange):根据路由键和绑定键的模式匹配规则来转发消息,绑定键中可以使用*(匹配一个单词)和#(匹配零个或多个单词)通配符。
  • 头交换机(Headers Exchange):通过消息头中的键值对进行匹配,而不是路由键,这种匹配可以是all(所有键值对都匹配)或any(任意一个键值对匹配)。
交换机的重要属性
  • 持久化(Durable):设置为持久化的交换机,在 RabbitMQ 服务器重启后不会丢失。
  • 自动删除(Auto-delete):当所有与之绑定的队列都解除绑定时,自动删除交换机。
  • 内部(Internal):内部交换机不能直接接收生产者的消息,只能用于交换机之间的绑定。

队列(Queue)

队列是 RabbitMQ 中存储消息的缓冲区,它遵循 FIFO(先进先出)原则,但在某些情况下,消费者也可以不按顺序接收消息。你可以把队列看作是邮局的信箱,信件会按照到达的顺序依次存放,直到被取走。

队列的主要特性
  • 持久化(Durable):持久化队列会将元数据和消息保存到磁盘,这样在 RabbitMQ 重启后,队列不会丢失。
  • 排他性(Exclusive):排他队列仅对首次声明它的连接可见,并且在该连接断开时会自动删除。
  • 自动删除(Auto-delete):当最后一个消费者取消订阅后,自动删除队列,但前提是队列曾经有过消费者。
  • 最大长度:可以限制队列中消息的数量,当达到最大长度时,新消息可能会被丢弃或替换旧消息。

消息(Message)

消息是 RabbitMQ 中在生产者和消费者之间传递的数据单元,它由消息头和消息体组成。消息头包含了如路由键、优先级、过期时间等元数据,而消息体则是实际要传输的数据。你可以把消息看作是信件的内容,包括信封上的地址信息(消息头)和信里的文字(消息体)。

消息的主要属性
  • 持久化(Persistent):设置为持久化的消息,会被写入磁盘,即使 RabbitMQ 服务器重启,消息也不会丢失。
  • 优先级(Priority):高优先级的消息可能会比低优先级的消息更早被消费,但这取决于队列的具体实现。
  • 过期时间(TTL):可以为消息设置过期时间,超过这个时间的消息将被自动删除。
  • 内容类型(Content Type):用于指定消息体的格式,例如application/jsontext/plain等。

三者之间的关系

RabbitMQ 中交换机、队列和消息的工作流程如下:

  1. 生产者将消息发送到交换机,并指定消息的路由键。
  2. 交换机根据自身的类型和绑定规则,决定将消息路由到哪些队列。
  3. 消息被存储在队列中,等待消费者消费。
  4. 消费者从队列中获取消息并进行处理。

持久化配置

为了确保消息在 RabbitMQ 服务器重启后不会丢失,需要对交换机、队列和消息进行持久化配置:

  • 交换机持久化:在声明交换机时,将durable参数设为true
  • 队列持久化:在声明队列时,把durable参数设置为true
  • 消息持久化:在发送消息时,将delivery_mode设置为2

只有同时配置了这三个方面的持久化,才能保证消息的可靠性。不过,需要注意的是,消息持久化会带来一定的性能开销,因为消息需要被写入磁盘。

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

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

相关文章

记录一次jenkins slave因为本地安装多个java版本导致的问题

今天,使用jenkins打包,发现slave掉线,上对应机器一看,好家伙,slave运行不起来了。命令行,java -vesion. 没反应,不会是哪个天杀的把java 给卸载了吧! 赶紧 where java看下。 还好 ja…

Java中Redis常用的API及其对应的原始API

相信大家写redis的时候经常忘记一些指令吧[狗头][狗头],这里整理了一下 一、 String(字符串类型) 1.代码块 // 设置字符串值 stringRedisTemplate.opsForValue().set("key", "value"); // Redis: SET key value// 设置…

C#使用ExcelDataReader高效读取excel文件写入数据库

分享一个库ExcelDataReader ,它专注读取、支持 .xls/.xlsx、内存优化。 首先安装NuGet 包 dotnet add package ExcelDataReader dotnet add package System.Text.Encoding.CodePages 编码 内存优化​​:每次仅读取一行,适合处理百万级数据…

雪豹速清APP:高效清理,畅享流畅手机体验

在智能手机的日常使用中,随着时间的推移,手机中会积累大量的垃圾文件,如临时文件、缓存数据、无用的安装包等。这些垃圾文件不仅会占用宝贵的存储空间,还会导致手机运行缓慢,甚至出现卡顿现象。为了解决这一问题&#…

关于使用v-bind绑定多个属性值的问题

背景。自定义表单开发。属性值过多,都写死很臃肿而且不方便维护。通过v-bind绑定非常方便。但是问题又来了。改以怎样的方式处理呢。返回值的格式需要注意 下面是两张动态处理v-bind属性的方法。第一张是写在了方法里面,第二张使用了虚拟属性。使用虚拟…

基于CNN的FashionMNIST数据集识别6——DenseNet模型

源码 import torch from torch import nn from torchsummary import summary""" DenseNet的核心组件:稠密层(DenseLayer) 实现特征复用机制,每个层的输出会与所有前序层的输出在通道维度拼接 """class DenseLayer(nn.Mod…

MySQL 中 INSERT ... ON DUPLICATE KEY UPDATE 为什么会导致主键自增失效?

最近开发的过程中,使用ai生成代码,写了一条这样的SQL:INSERT … ON DUPLICATE KEY UPDATE,然后发现一个奇怪的现象: 为什么使用这个语法后,自增主键(AUTO_INCREMENT)的值会跳跃甚至…

jenkins流水线打包vue无权限

jenkins在使用npm命令进行拉取依赖时,创建目录会报错无权限,如下如所示 这是因为npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户权限非常低 若需要…

快速实现golang的grpc服务

文章目录 1、安装服务2、检查安装版本情况3、编写proto文件4、生成代码5、实现业务逻辑6、创建provider7、测试调用 1、安装服务 1、protoc安装 需去官网下载 protobuf 2、命令行安装protoc-gen-go和protoc-gen-go-grpc $ go install google.golang.org/protobuf/cmd/protoc-…

C++ 学习 多线程 2025年6月17日18:41:30

多线程(标准线程库 <thread>) 创建线程 #include <iostream> #include <thread>void hello() {std::cout << "Hello from thread!\n"; }int main() {// 创建线程并执行 hello() std::thread t(hello); //线程对象&#xff0c;传入可调用对…

常见的测试工具及分类

Web测试工具是保障Web应用质量的核心支撑&#xff0c;根据测试类型&#xff08;功能、性能、安全、自动化等&#xff09;和场景需求&#xff0c;可分为多个类别。以下从​​八大核心测试类型​​出发&#xff0c;梳理常见工具及其特点、适用场景&#xff1a; ​​一、功能测试工…

七牛存储sdk在springboot完美集成和应用 七牛依赖 自动化配置

文章目录 概要依赖配置属性配置类配置文件业务层控制层运行结果亮点 概要 七牛存储很便宜的&#xff0c;在使用项目的用好官方封装好的sdk&#xff0c;结合springboot去使用很方便&#xff0c;我本地用的是springoot3spring-boot-autoconfigure 依赖 <dependency><…

Java相关-链表-设计链表-力扣707

你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表中的上一个节点…

C# 关于LINQ语法和类型的使用

常用语法&#xff0c;具体问题具体分析 1. Select2. SelectMany3. Where4. Take5. TakeWhile6. SkipWhile7. Join8. GroupJoin9. OrderBy10. OrderByDescending11. ThenBy12. Concat13. Zip14. Distinct15. Except16. Union17. Intersect18. Concat19. Reverse20. SequenceEqua…

华为OD-2024年E卷-小明周末爬山[200分] -- python

问题描述&#xff1a; 题目描述 周末小明准备去爬山锻炼&#xff0c;0代表平地&#xff0c;山的高度使用1到9来表示&#xff0c;小明每次爬山或下山高度只能相差k及k以内&#xff0c;每次只能上下左右一个方向上移动一格&#xff0c;小明从左上角(0,0)位置出发 输入描述 第一行…

Android:使用OkHttp

1、权限&#xff1a; <uses-permission android:name"android.permission.INTERNET" /> implementation com.squareup.okhttp3:okhttp:3.4.1 2、GET&#xff1a; new XXXTask ().execute("http://192.168.191.128:9000/xx");private class XXXTask…

Vue3+Element Plus动态表格列宽设置

在 Vue3 Element Plus 中实现动态设置表格列宽&#xff0c;可以通过以下几种方式实现&#xff1a; 方法 1&#xff1a;动态绑定 width 属性&#xff08;推荐&#xff09; vue 复制 下载 <template><el-table :data"tableData" style"width: 100%…

【JVM目前使用过的参数总结】

JVM参数总结 笔记记录 JVM-栈相关JVM-方法区(元空间)相关JVM-堆相关 JVM-栈相关 .-XX:ThreadStackSize1M -Xss1m 上面的简写形式【设置栈的大小】 JVM-方法区(元空间)相关 -XX:MaxMetaspaceSize10m 【设置最大元空间大小】 JVM-堆相关 -XX:MaxHeapSize10m -Xmx10m 上面的简写形…

AI辅助高考志愿填报-专业全景解析与报考指南

高考志愿填报&#xff0c;这可是关系到孩子未来的大事儿&#xff01;最近&#xff0c;我亲戚家的孩子也面临着这个难题&#xff0c;昨晚一个电话就跟我聊了好久&#xff0c;问我报啥专业好。说实话&#xff0c;这问题真不好回答&#xff0c;毕竟每个孩子情况不一样&#xff0c;…

Android Studio Windows安装与配置指南

Date: 2025-06-14 20:07:12 author: lijianzhan 内容简介 文章中&#xff0c;主要是为了初次接触 Android 开发的用户提供详细的关于 Android Studio 安装以及配置教程&#xff0c;涵盖环境准备、软件下载、安装配置全流程&#xff0c;重点解决路径命名、组件选择、工作空间设置…