当前位置: 首页 > news >正文

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则

JMS 也是一种消息机制
在这里插入图片描述

AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议
在这里插入图片描述

★ RabbitMQ的核心概念

Connection: 代表客户端(包括消息生产者和消费者)与RabbitMQ之间的连接。

Channel: 连接内部的Channel。

Exchange: 充当消息交换机的组件。

Queue: 消息队列。

★ RabbitMQ工作机制

AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议
RabbitMQ 是一种属于 AMQP 这种协议的消息组件。
RabbitMQ 是遵循 AMQP 的一个实现

▲ 原有JMS只有三层:

消息生产者---------->消息目的---------->消息消费者

▲ AMQP(RabbitMQ)增加了一层

消息生产者----------Exchange-----------消息队列(目的)----------消息消费者

同理,无论是消息生产者,还是消息消费者,它们都使用Connection与消息Broker之间建立连接——这一点与JMS是一样。

RabbitMQ的消息生产者、消息消费者实际与消息Broker通信的是Channel,
JMS实际则使用Session。

在这里插入图片描述

★ Connection(连接) 与 Channel(通信信道)

▲ 不管是消息生产者,还是消息消费者,它们都要通过Connection建立与RabbitMQ之间的连接,因此Connection就代表客户端与RabbitMQ之间的连接。

▲ 但客户端与RabbitMQ之间实际通信所用的是Channel(信道),这是因为RabbitMQ采用了类似于Java NIO的做法,避免为应用程序中的每个线程都建立单独的连接,因此是使用Channel来复用连接,这样不仅可以降低性能开销,而且也便于管理。

简单两句话:

 - Connction代表了客户端与消息Broker之间的连接。建立连接用Connection。- Channel代表了客户端与消息Broker之间的通信信道。实际通信用Channel。Channel位于Connection之内,也就是说,Channel必须通过Connection来获得。

★ Exchange

消息生产者发送消息时,只需指定两个关键信息:

 - exchange:将该消息发送到哪个Exchange。- routing key:消息的路由key。该路由key会决定消息要被路由到哪些消息队列。

RabbitMQ的消息生产者只需指定将消息发送到哪个Exchange,Exchange相当于消息交换机,

▲ Exchange 它会根据自身的类型和消息的路由key(routing key),将消息分发到一个或多个消息队列(Queue)
消息实际依然由于消息队列来负责管理。
消息由Exchange负责分发。

▲ 简单来说:
消息生产者将消息发送给Exchange,Exchange负责将消息分发给对应的Queue,Exchange分发消息的关键在于它本身的类型和路由key。

▲ 消息生产者发送消息时,与消息队列是无关的。(只跟exchange和routing key有关)

▲ 消息消费者接收消息时,只需从指定消息队列中获取消息即可,与Exchange是无关的。
(只跟消息队列有关)

★ Exchange与Queue

▲ 为了让Exchange能将信息分发给Queue,Queue需要将自己绑定到Exchange上(也就是让Exchange来管理多个Queue),
Exchange只会将消息分发给绑定到自己的Queue,没有绑定的Queue不会得到Exchange分发的消息。

将Queue绑定到Exchange的过程,就相当于将Queue注册到Exchange的过程。

▲ 将Queue绑定到Exchange时,也需要指定一个路由key。

▲ Exchange就根据发送消息时指定的路由key、绑定Queue时指定的路由key来决定要将消息分发给哪些Queue。

【备注】:路由key(就是个字符串),两个地方需要用到:

A:将Queue绑定到Exchange时,需要指定路由key。

B:发送消息时,需要Exchange和路由key。




★ Exchange的类型(4种)及 该类型对应的路由规则


Exchange来分发消息时,要看Exchange本身的类型、消息的路由key。

fan:扇子  out:出现、向外   fanout:扇出、展开、散开、分列

fanout: 广播Exchange这种类型的Exchange会将消息广播到所有与它绑定的Queue。
这种类型的Exchange在分发消息时不看路由key。
只要将消息发送到该Exchange,该消息就会被自动广播所有消息队列——这就是典型的Pub-Sub模型。

direct: 这种类型的Exchange将消息直接发送到路由key对应的队列。
direct:笔直的、径直的
消息队列绑定到Exchange时,要指定路由key;
发送消息时,也要指定路由key;
就是使用direct类型的Exchange只有当两个路由key完全相同时,该消息队列才能被分发消息

topic: 这种类型的Exchange在匹配路由key时支持通配符,相当于它是增强型的direct

【备注】:此处的topic类型的Exchange与JMS的消息主题没有半毛钱的关系。

headers: 这种类型的Exchange要根据消息自带的头信息进行路由。这种类型比较少用。




消息发送到消息队列的一些示例:

如图:假设消息生产者又发送了一条消息,路由key 是 abc , 那么这个 路由key 是 abc 的 消息,在发送到 exchange 之后,就会直接被丢弃了,因为 exchange 绑定的众多 queue 消息队列中,没有对应的 路由key 是 abc。所以这个消息不会分发给任何的消息队列。
在这里插入图片描述

 路由key通配符解释:单词与单词之间用【  .   点号】隔开, 比如:路由key是:aaa.bbb.ccc   ,就表示这个路由key是由三个单词组成的。【* . crazyit . * 】 表示这个 路由key 只能是三个单词组成,第一个和第三个单词随便,
但是中间的单词一定要是 crazyit  ,才可以匹配上。【* . org】 表示这个 路由key 只能是两个单词组成,第一个单词随便,
但是第二个单词一定要是 org,才可以匹配上【# . org】 # 号代表0-N 个单词,表示这个 路由key 是多个单词组成,或者只有一个 org 也算匹配上。org 前面有多少个单词都没问题,或者没单词也可以,只要最后一个单词是 org , 那么就可以匹配上。

在这里插入图片描述

相关文章:

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则

JMS 也是一种消息机制 AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议 ★ RabbitMQ的核心概念 Connection: 代表客户端(包括消息生产者和消费者)与RabbitMQ之间的连接。 Channel: 连接内部的Channel。 Exch…...

系统架构设计:18 论基于DSSA的软件架构设计与应用

目录 一 特定领域软件架构DSSA 1 DSSA 2 DSSA的基本活动和产物 (1)DSSA的基本活动和产物...

Android原生实现控件outline方案(API28及以上)

Android控件的Outline效果的实现方式有很多种,这里介绍一下另一种使用Canvas.drawPath()方法来绘制控件轮廓Path路径的实现方案(API28及以上)。 实现效果: 属性 添加Outline相关属性,主要包括颜色和Stroke宽度&…...

ROS学习笔记(六)---服务通信机制

1. 服务通信是什么 在ROS中,服务通信机制是一种点对点的通信方式,用于节点之间的请求和响应。它允许一个节点(服务请求方)向另一个节点(服务提供方)发送请求,并等待响应。 服务通信机制在ROS中…...

常见的C/C++开源QP问题求解器

1. qpSWIFT qpSWIFT 是面向嵌入式和机器人应用的轻量级稀疏二次规划求解器。它采用带有 Mehrotra Predictor 校正步骤和 Nesterov Todd 缩放的 Primal-Dual Interioir Point 方法。 开发语言:C文档:传送门项目:传送门 2. OSQP OSQP&#…...

前端axios发送请求,在请求头添加参数

1.在封装接口传参时,定义形参,params是正常传参,name则是我想要在请求头传参 export function getCurlList (params, name) {return request({url: ********,method: get,params,name}) } 2.接口调用 const res await getCurlList(params,…...

CTF Misc(3)流量分析基础以及原理

前言 流量分析在ctf比赛中也是常见的题目,参赛者通常会收到一个网络数据包的数据集,这些数据包记录了网络通信的内容和细节。参赛者的任务是通过分析这些数据包,识别出有用的信息,例如登录凭据、加密算法、漏洞利用等等 工具安装…...

Telink泰凌微TLSR8258蓝牙开发笔记(二)

在开发过程中遇到了以下问题,记录一下 1.在与ios手机连接后,手机app使能notify,设备与手机通过write和notify进行数据交换,但是在连接传输数据一端时间后,设备收到write命令后不能发出notify命令,打印错误…...

vue3+elementPlus:el-tree复制粘贴数据功能,并且有弹窗组件

在tree控件里添加contextmenu属性表示右键点击事件。 因右键自定义菜单事件需要获取当前点击的位置&#xff0c;所以此处绑定动态样式来控制菜单实时跟踪鼠标右键点击位置。 //html <div class"box-list"><el-tree ref"treeRef" node-key"id…...

JTS:10 Crosses

这里写目录标题 版本点与线点与面线与面线与线 版本 org.locationtech.jts:jts-core:1.19.0 链接: github public class GeometryCrosses {private final GeometryFactory geometryFactory new GeometryFactory();private static final Logger LOGGER LoggerFactory.getLog…...

MySQL中的SHOW FULL PROCESSLIST命令

在MySQL数据库管理中&#xff0c;理解和监控当前正在执行的进程是至关重要的一环。MySQL提供了一系列强大的工具和命令&#xff0c;使得这项任务变得相对容易。其中&#xff0c;SHOW FULL PROCESSLIST命令就是一个非常有用的工具&#xff0c;它可以帮助我们查看MySQL服务器中的…...

VsCode 常见的配置、常用好用插件

1、自动保存&#xff1a;不用装插件&#xff0c;在VsCode中设置一下就行 2、设置ctr滚轮改变字体大小 3、设置选项卡多行展示 这样打开了很多个文件&#xff0c;就不会导致有的打开的文件被隐藏 4、实时刷新网页的插件&#xff1a;LiveServer 5、open in browser 支持快捷键…...

深度学习问答题(更新中)

1. 各个激活函数的优缺点&#xff1f; 2. 为什么ReLU常用于神经网络的激活函数&#xff1f; 在前向传播和反向传播过程中&#xff0c;ReLU相比于Sigmoid等激活函数计算量小&#xff1b;避免梯度消失问题。对于深层网络&#xff0c;Sigmoid函数反向传播时&#xff0c;很容易就…...

JavaScript 笔记: 函数

1 函数声明 2 函数表达式 2.1 函数表达式作为property的value 3 箭头函数 4 构造函数创建函数&#xff08;不推荐&#xff09; 5 function 与object 5.1 typeof 5.2 object的操作也适用于function 5.3 区别于⼀般object的⼀个核⼼特征 6 回调函数 callback 7 利用function的pr…...

2023NOIP A层联测9-天竺葵

天竺葵/无法阻挡的子序列/很有味道的题目 我们称一个长度为 k k k 的序列 c c c 是好的&#xff0c;当且仅当对任意正整数 i i i 在 [ 1 , k − 1 ] [1,k-1] [1,k−1] 中&#xff0c;满足 c i 1 > b i c i c_{i1}>b_i \times c_i ci1​>bi​ci​&#xff0c; …...

react antd table表格点击一行选中数据的方法

一、前言 antd的table&#xff0c;默认是点击左边的单选/复选按钮&#xff0c;才能选中一行数据&#xff1b; 现在想实现点击右边的部分&#xff0c;也可以触发操作选中这行数据。 可以使用onRow实现&#xff0c;样例如下。 二、代码 1.表格样式部分 //表格table样式部分{…...

【VUEX】最好用的传参方式--Vuex的详解

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VuexElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Vuex是什么 1.定义 2…...

【.net core】yisha框架 SQL SERVER数据库 反向递归查询部门(子查父)

业务service.cs中ListFilter方法中内容 //反向递归查询部门列表List<DepartmentEntity> departmentList await departmentService.GetReverseRecurrenceList(new DepartmentListParam() { Ids operatorInfo.DepartmentId.ToString() });if (departmentList ! null &am…...

java处理时间-去除节假日以及双休日

文章目录 一、建表:activity_holiday_info二、java代码1、ActivitityHolidayController.java2、ActivityHolidayInfoService.java3、ActivityHolidayInfoServiceImpl.java 三、测试效果 有些场景需要计算数据非工作日的情况&#xff0c;eg&#xff1a;统计每个人每月工作日签到…...

快讯|Tubi 有 Rabbit AI 啦

在每月一期的 Tubi 快讯中&#xff0c;你将全面及时地获取 Tubi 最新发展动态&#xff0c;欢迎星标关注【比图科技】微信公众号&#xff0c;一起成长变强&#xff01; Tubi 推出 Rabbit AI 帮助用户找到喜欢的视频内容 Tubi 于今年九月底推出了 Rabbit AI&#xff0c;这是一项…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...