3.RabbitMQ 架构以及 通信方式
一、RabbitMQ的架构
RabbitMQ的架构可以查看官方地址


可以看出RabbitMQ中主要分为三个角色:
- Publisher:消息的发布者,将消息发布到RabbitMQ中的Exchange
- RabbitMQ服务:Exchange接收Publisher的消息,并且根据Routes策略将消息转发到Queue中
- Consumer:消息的消费者,监听Queue中的消息并进行消费
- Routes:就是我们下面说的 Routing Key
RabbitMQ发送消息的策略是,消息到达Exchange,然后根据 RoutingKey 去配置到 Queue,然后消费者监听queue来完成消费
二、AMQP概念
RabbitMq是基于AMQP协议的。
1.什么是AMQP协议

- server:又称Broker,接收客户端连接,实现AMQP实体服务
- Connection: 连接,应用程序与Broker的网络连接
- Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
- Virtual Host :虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual host里面可以有若干个Exchange和Queue,同一个Virtual host 里面不能有相同名称的Exchange或Queue,可以理解为 Mysql中的 db概念,不同的用户可以管理不同的 Virtual Host,默认是 / 目录,也可以在 管理页面上 创建 Virtual Host 并指定给相应的用户,或者在命令行中创建和设置用户。
- ExChange:交换机,接收消息,根据路由键转发消息到绑定的队列
- Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key(路由键)
- Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息
- Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者
- Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成,Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容
二、ExChange详解
- Name:交换机名称
- Type:RabbitMQ中交换机的类型有 direct(直接) 、topic(主题)、fanout(广播)、headers(标题)
- Durability:交换机是否需要持久化,true为持久化。
- Auto Delete:当最好一个绑定到Exchange上的队列删除后,自动删除Exchange。
- Internal:当前Exchange是否用于RabbitMQ内部使用,默认False
- Arguments:扩展参数,用户扩展AMQP协议自制定化使用
三、Queue详解
- name:队列的名称
- durable:是否是持久化队列
- autoDelete:当最后一个消息不在了,是否自动删除队列,默认false。
三、RabbitMQ通讯的方式
RabbitMQ通讯方式 是依赖于 Exchange的类型的。
3.1 direct类型交换机
所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue
注意:Direct模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行任何绑定操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃
注意:Direct模式可以使用RabbitMQ自带的Exchange:default
Exchange,所以不需要将Exchange进行任何绑定操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃

3.2 fanout类型交换机
- 不处理Routing Key,只需要简单的将队列绑定到交换机上
- 发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
- Fanout交换机转发消息是最快的

3.3 topic类型交换机
所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上
Exchange将RouteKey和某个Topic进行模糊匹配,此时队列需要绑定一个Topic
注意:可以使用通配符进行模糊匹配
- 符号
#匹配一个或多个词 - 符号
*只匹配一个词 - 例如:
log.#能够匹配到 log.info.a、log.info.c、log.info log.*只能匹配到 log.info 。

3.4 headers类型交换机
上面的三种都是通过 Routing Key来进行匹配的,而headers是通过消息的header来进行匹配的。

headers头部的 x-match 参数是 必须的,如果x-match设置的是all,那么生产者在生产消息时必须满足设置的headers条件,
我上面设置的是 x-match=all ,name=jack,age=23,那么我想发送消息到这个队列里面,那么消息头必须要有 name=jack,age=23。
如果我设置的是 x-match=any ,那么我满足其中一个条件就好了,比如上面是 name = jack,age= 23,那么我消息头带其中的一个就可以了,也就是他们两个的任意一个。
如果不满足的话,消息无法到达exchange绑定的queue中。
相关文章:
3.RabbitMQ 架构以及 通信方式
一、RabbitMQ的架构 RabbitMQ的架构可以查看官方地址 可以看出RabbitMQ中主要分为三个角色: Publisher:消息的发布者,将消息发布到RabbitMQ中的ExchangeRabbitMQ服务:Exchange接收Publisher的消息,并且根据Routes策…...
分布式事务篇-2.1 阿里云轻量服务器--Docker--部署Seata
文章目录 前言一、Seata 介绍二、Docker 部署:2.1.拉取镜像:2.2.运行镜像:2.3.拷贝配置文件:2.4.部署:2.5.参数解释:2.5.1 端口:2.5.2 SEATA_IP:2.5.3 SEATA_PORT:2.5.4 …...
C语言这么没用??
今日话题,C语言真的这么不堪吗?最近我兄弟向我倾诉,他在几天前受到老板的责骂,原因是他只懂C语言编程,无法达到老板的期望。其实不是C语言不堪,而是嵌入式领域复杂性多种多样,需要灵活的解决方案…...
Docker运维篇
Docker运维篇 Docker 设置自启Docker 指定容器设置自启重启linux 计算机网络常见错误汇总centos 7 Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work Docker 设置自启 # 重启docker sudo systemctl enable docker# 设置开机自启 systemctl e…...
【数学建模】清风数模正课7 多元线性回归模型
多元线性回归分析 回归分析就是,通过研究自变量X和因变量Y的相关关系,来解释Y的形成机制,从而达到通过X去预测Y的目的。 所以回归分析需要完成三个使命,首先是识别重要变量,其次是判断正负相关,最后是估计…...
文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题
四、用go语言,假设现有一个包含n个元素的待排序序列。该序列由 n/k 个子序列组成,每个子序列包含k个元素。一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素。因此,对于这个长度为 n 的…...
温故知新之:代理模式,静态代理和动态代理(JDK动态代理)
0、前言 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。 1、静态代理 静态代理是一种代理模式的实现方式,它在编译期间就已经确定了代理对象,需要为每一个被代理对象创建一个代理类。静态代…...
软件工程(十二) 设计模式之创建型模式
我们传统的23种设置模式如下 创建型模式:用于创建对象 工厂方法(Factory Method) 模式抽象工厂(Abstract Factory) 模式原型(Protptype) 模式单例(Singleton) 模式构建器模式结构型模式:建立更大的结构 适配器(Adapter)模式桥接(Bridge)模式组合(Composite)模式装饰(D…...
使用docker、docker-compose部署微服务
使用docker、docker-compose部署微服务 一、使用docker部署1、准备2、上传jar包3、编写dockerfile文件3、构建镜像和容器 二、使用docker-compose部署1、准备服务的jar包和dockerfile文件2、编写docker-compose.yml文件3、docker-compose常用命令(1)、前…...
【Axure高保真原型】中继器网格图片拖动摆放
今天和大家分享中继器网格图片拖动摆放的原型模板,我们可以通过鼠标拖动来移动图片,拖动过程其他图标会根据图片拖动自动排列,松开鼠标是图片停放在指定位置,其他图标自动排列。那这个模板是用中继器制作的,所以使用也…...
《基于 Vue 组件库 的 Webpack5 配置》4. 压缩 CSS 和 js 文件
压缩 CSS 使用 webpack 插件 css-minimizer-webpack-plugin,需要额外安装 npm i css-minimizer-webpack-pluginlatest -D;压缩 js 使用 webpack 自带插件 terser-webpack-plugin,无需额外安装;package.json 的配置如下 const Css…...
electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错
用 electron 开发软件,在设置了 globalShortcut 快捷键后,在当前开发的软件上调用快捷键正常,但是当焦点不在当前软件时,在使用快捷键,好些时候会报错。大概率与系统快捷键产生冲突或者快键键控制的回调里获取的内容&a…...
【PHP】PHP条件控制
在PHP中,条件控制语句用于根据条件来执行不同的代码块。以下是一些常见的条件控制语句: if语句: if ($condition) {// 如果条件为真,执行此代码块 }if-else语句: if ($condition) {// 如果条件为真,执行…...
超干货!Linux中断响应流程
为了提高外部事件处理的实时性,现在的处理器几乎无一例外都含有中断控制器,外设也大都带有中断触发的功能。为了能支持这一特性,Linux系统中设计了一个中断子系统来管理系统中的中断。 那么你知道Linux系统中的中断响应是怎样的流程吗&#…...
统计学补充概念-13-逻辑回归
概念 逻辑回归(Logistic Regression)实际上是一种用于解决分类问题的统计学习方法,尽管其名称中带有"回归"一词,但它主要用于处理分类任务。逻辑回归用于预测一个事件发生的概率,并将其映射到一个特定的输出…...
java八股文面试[多线程]——什么是线程安全
对线程安全的理解 总结:一个进程内的多个线程同时访问堆内存。 知识来源: 【并发与线程】对线程安全的理解_哔哩哔哩_bilibili...
Redis 介绍
一.Redis 介绍 Redis 和 Memcached 都是非关系型数据库也称为 NoSQL 数据库,MySQL、 Mariadb、SQL Server、PostgreSQL、Oracle 数据库属于关系型数据 关系型数据库(RDBMS, Relational Database Management System)。 1.1 Redis 介绍 Redis(Remote Dictionary Se…...
冠达管理:核污染防治板块热度不减,建工修复等多只个股涨停
日本福岛核污染水排海引发商场担忧,核污染防治概念股表现持续活跃。 8月28日,建工修复(300958.SZ)、中电环保(300172.SZ)、捷强配备(300875.SZ)20CM强势涨停,中广核技&a…...
Unity关键概念
Unity是一款跨平台的游戏引擎和开发工具,用于创建2D和3D游戏、交互式内容和应用程序。它提供了一个强大的开发环境,使开发者能够轻松地设计、开发和部署高质量的游戏和应用程序。 以下是Unity的几个关键概念: 游戏对象(Game Obj…...
JDK配置环境变量(超详细)
先安装JDK再配置环境变量! JDK可以简单理解为就是java,JDK包含了java项目运行所需要的运行环境JRE,编译运行java程序的java虚拟机JVM。 jdk-8u201-windows-x64安装包(jdk1.8): 提取码:19xv …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
