首页 > 其他分享 >2023-07-06:RabbitMQ中的AMQP是什么?

2023-07-06:RabbitMQ中的AMQP是什么?

时间:2023-07-06 22:23:27浏览次数:47  
标签:交换器 06 AMQP 虚拟主机 队列 RabbitMQ TCP

2023-07-06:RabbitMQ中的AMQP是什么?

答案2023-07-06:

AMQP

AMQP(Advanced Message Queuing Protocol)是一个应用层协议的开放标准,旨在设计面向消息的中间件。基于AMQP协议的客户端和消息中间件可以自由地传递消息,不受客户端、中间件产品或开发语言的限制。其目标是实现一种被广泛应用于各行业的标准消息中间件技术,以降低企业和系统集成的成本,并提供工业级的集成服务。RabbitMQ是AMQP协议的一个主要实现。

image.png

客户端与RabbitMQ的通讯

连接

作为客户端(生产者或消费者),要与RabbitMQ通信,首先需要建立一条TCP连接。在建立连接后,客户端需要发送一条"问候语",以确保彼此都遵循AMQP协议。这类似于与他人打招呼时说"你好",或者与外国人打招呼时说"hello"。一旦确认了使用相同的"语言",客户端和RabbitMQ就完成了"认证"。然后,它们可以创建一个AMQP信道来进行通信。

信道

信道是生产者和消费者与RabbitMQ进行通信的通道。它是在TCP连接上建立的虚拟连接。这意味着RabbitMQ可以在一条TCP连接上创建多个信道,以便处理多个线程。每个线程对应一个唯一的信道ID,从而保证了信道的私有性,并与特定的线程相关联。

为什么不使用多个TCP连接呢?这是因为通过多路复用技术,RabbitMQ可以在单个TCP连接上支持成百上千的信道。每秒创建和销毁大量的TCP连接对系统性能消耗较大。因此,选择在一条TCP连接上建立多个信道是为了保证性能。

从技术上讲,这被称之为“多路复用”,对于执行多个任务的多线程或者异步应用程序来说,它非常有用。

虚拟主机

虚拟主机(Virtual Host),简称vhost,实质上是一个精简版的消息队列服务器,拥有自己的队列、交换器和绑定,而且最重要的是具备独立的权限机制。虚拟主机能够在逻辑上实现客户端之间的隔离,避免队列和交换器名称的冲突。在连接到RabbitMQ时,必须指定虚拟主机。RabbitMQ默认包含一个名为"/"的虚拟主机,通过默认的用户和密码(guest)进行访问。

在RabbitMQ中创建用户时,必须将其分配给至少一个虚拟主机,并且该用户只能访问其所分配的虚拟主机中的队列、交换器和绑定。虚拟主机的创建需要通过RabbitMQ的管理控制工具进行操作。

交换器类型

交换器类型共有四种:direct、fanout、topic和headers。其中,headers类型与direct类型非常相似且不常使用,可以忽略不计。

Direct

Direct交换器是一种路由键完全匹配的交换器类型,它将消息按照路由键的完全匹配进行投递到相应的队列。Direct交换器是RabbitMQ的默认交换器。当声明一个队列时,它会自动绑定到默认的Direct交换器,并以队列名称作为路由键进行消息的发布:channel->basic_public($msg,’’,’queue-name’)。

image.png

Fanout

Fanout交换器将消息广播到所有绑定的队列,不管队列是否绑定了特定的路由键。当消息经过Fanout交换器时,每个队列都会收到一份复制的消息。

image.png

Topic

Topic交换器通过使用“”和“#”通配符来处理消息的路由键,从而将来自不同源头的消息投递到同一个队列。在Topic交换器中,路由键可以包含多个标识符,通过使用“.”进行分隔。“”通配符用于匹配一个标识符,而“#”通配符用于匹配一个或多个标识符。

image.png

标签:交换器,06,AMQP,虚拟主机,队列,RabbitMQ,TCP
From: https://www.cnblogs.com/moonfdd/p/17533482.html

相关文章

  • P8182 「EZEC-11」雪的魔法 / NOIP 模拟赛 20230706 D 思考--zhengjun
    引用:这是一道非常棒的思维题,可以说没有用到任何高深的知识点,却极大地考验了做题人的思维能力和创造性。本题分为两步。根据线性规划对偶或贪心,转化题意。对\(m\)根号分治,然后分别进行分治。\(m\le\sqrt{n}\)分治比较好想,\(m>\sqrt{n}\)的根号分治比较难想。这......
  • QOJ 5500. Bars / NOIP 模拟赛 20230706 B 进阶版--zhengjun
    本题转化为梯形面积就已经不是很好想了(赛时切掉,开心!)进阶为静态区间查询。使用不删除莫队+凸包合并凸包合并就是把散块和整块的凸包合并注意这里两个凸包的横坐标值域是无交的于是可以使用二分套二分解决此问题代码咕着,感觉非常难写......
  • 230706 // 换根 DP 复习
    菌:园什是我笋子元首:我是你打野我:元首耳朵得治G.求树的重心http://222.180.160.110:1024/contest/3744/problem/7我们知道,重心的定义是,将其切除后,每个连通块的大小不超过\(\dfracn2\)。连通块分为其子树和整棵树减去该结点引导的子树,所以我们记录size,在每次搜索结束后......
  • 2023-07-06 Matlab中符号和句柄之间的转换.md
    2023-07-06Matlab中符号和句柄之间的转换Matlab符号函数函数句柄在Matlab中我们通常使用diff函数求导,其中如果f是符号函数,diff也返回符号函数,那么符号函数和句柄之间如何转换呢?下面给出一些例子:f1=@(x)sin(x);%函数句柄 symsx f2=sin(x);%符号 f3(x)=sin(x);%符......
  • 「NOIP 模拟赛 20230706」轨道飞跃
    summarizationsolution考虑倒着走,那么从\(u\)走到\(v\)条件就变为\(r_v\)在\(u\)所在的区间内,于是我们预处理出右端点在这段区间内的轨道的左端点的最小值(可以用ST表),然后从\(t\)跳回\(s\)。不难发下,往回跳的过程可以用倍增优化(具体见代码),最终复杂度\(\mathcal{O......
  • 20230706巴蜀暑期集训测试总结
    T1我是个大聪明!一眼矩乘。构造转移矩阵构造了3.5h!最开始以为只有\(15\times15\),直接手打。写到一半发现不一定四种颜色都有,是\(52\times52\)的,这时候狗被脑子吃了,还想手打,于是就打到了3h。差不多打了一大半,脑子终于把狗还回来了,意识到就算打完也不可能调得出来,就开始另辟蹊径,......
  • 「NOIP 模拟赛 20230706」偷 WiFi
    summarization有一个长度为\(n\)的序列\(p\),将其中若干个数标记。对于序列中的每一个位置\(i\),其贡献为其左边与右边离它最近的被标记的数的数值的和。求出最大的贡献总和。(\(1\len\le2\times10^6\))solution首先显然,\(p_1,p_n\)一定要标记。然后考虑分别求相邻的标记数......
  • 2023-07-06 uview-ui组件u-checkbox设置label-disabled无效==》点击文本仍旧触发check
    解决方案:既然无效,那就给checkbox包裹的文本绑定一个点击事件,该点击事件使用.stop来阻止事件冒泡,这样点击文本就不会触发checkbox的change了,可以参考一下代码:<u-checkbox><[email protected]="stopBack"></View></u-checkbox>关键点:@click.stop注:改问题出自uview-ui1.......
  • C/C++学生成绩管理系统[2023-07-06]
    C/C++学生成绩管理系统[2023-07-06]学生成绩管理系统开发一个可以管理学生成绩以及学生基本信息的一个信息系统,至少实现如下功能:信息管理,支持信息的增、删、改、查操作,具体信息类型如下:(1) 管理学生信息 ,包括学号,姓名,年龄,班级等等信息。(2) 班级信息,包括班级编号、班级人数,......
  • C++电影评分系统[2023-07-06]
    C++电影评分系统[2023-07-06]程序设计综合课程设计指导书一、题目:电影评分系统二、设计内容及要求:根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能。本系统要求模拟实现电影评分系统,其中包括电影资源管......