AMQP协议介绍
这篇文章主要介绍AMQP 0-9-1 协议,是RabbitMQ支持的协议之一,理解AQMP对于使用和理解RabbitMQ也很有帮助。
AMQP 0-9-1(高级消息队列协议)是一种消息传递协议,它使客户端应用程序能与消息中间件进行通信。消息中间件接收Producer的消息,并将消息路由到Queue,Consumer订阅Queue,就能消费到消息。从AMQP 0-9-1 模型看,Producer发布消息到Exchange(交换器),Exchange根据绑定规则,将消息路由到一个或多个Queue。消息中间件把消息推送给订阅该Queue的Consumer,或者由Consumer从Queue上拉取消息。
下图直观的展示了AMQP 0-9-1 协议中的角色和消息主要流转过程,其中Exchange、Bindings、Qeue是AMQP 0-9-1的主要实体。
Exchange
AMQP 0-9-1 定义了Exchange,用来把消息路由到Queue,路由算法依赖 Binding Rule 和 Exchange 类型,AMQP 0-9-1 提供了4种Exchange类型。
Exchange type
默认的预定义的名字
Direct exchange
(Empty string) and amq.direct
Fanout exchange
amq.fanout
Topic exchange
amq.topic
Headers exchange
amq.match (and amq.headers in RabbitMQ) Default Exchange
默认的Exchange是没有名字的,它是一种特殊的Direct Exchange。所有的Queue创建完,如果没有手动设置绑定关系,自动绑定到默认的Exchange,Routing Key 和 Queue 名字相同。 Direct Exchange
Direct Exchange 要求发布消息时设置的Routing Key 必须与 Binding Key 一致,才能路由到Queue。它常用的场景是分发消息,根据Routing Key,把消息分发给不同的Consumer。 Fanout Exchange
Fanout Exchange忽略Binding Key,会把消息路由给所有与它绑定的Queues,类似于广播消息。 Topic Exchange
Topic Exchange是一种比较灵活的Exchange,采用模式匹配的方式路由消息,具体的模式匹配规则由各个消息中间件实现。 RabbitMQ的实现规则在下一篇文章中更新,小伙伴慢记得关注哦。 Headers Exchange
Headers Exchange根据消息的属性来路由消息,比如设置绑定的属性是x-product=product1,那么只有消息上有x-product=product1这个属性值时才会路由到队列。 Bindings
Bindings是Exchange和Queue绑定的具体规则,Exchange就是根据这个Bindings路由消息到Queue的。发布消息时的Routing Key必须和Binding Key匹配,消息才能正确路由到Queue。 Queue
Queue是实际保存消息的地方,AMQP 0-9-1规定队列名字的长度不能超过255个字节。如果客户端没有指定队列名字,Broker会自动生成队列名字,不管是哪种方式,必须保证队列名字唯一。如果申明的队列已经在Broker存在,那么就会报403错误。 持久性
AMPQ 0-9-1 规定,队列可以申明为持久化和非持久化的,持久化队列会保存到磁盘,包括它的元数据。非持久化的队列只是保存在内存中。 Consumer
AQMP 0-9-1 规定消费者有两种方式消费消息: Consumer订阅,Broker推送消息给Consumer,这种方式也是推荐的一种实现。优点是获取消息实时,缺点是失去了对消息控制的灵活性,比如根据机器的性能决定一次消费多少消息。 Consumer拉取消息,优点是客户端可控性高,缺点是无法准确获知消息何时到达。 消息确认
由于网络是不可靠的,当Broker推送消息给Consumer后,无法知道这条消息是否已经被Consumer接收并正确处理了,Broker也无法判断是否可以移除这条消息。所以AMQP 0-9-1 定义了消息确认机制,有两种不同的模式:在Broker发出消息之后,这种方式容易导致消息丢失。在应用程序返回ack之后。
默认是自动确认,也支持手动确认,推荐使用手动确认,因为客户端程序可以自己控制在何时进行消息确认。拒绝消息
消费者处理消息有可能失败,或者当前业务逻辑无法正确处理,就可以拒绝消息,此时,消息可能会被丢弃,也有可能重新入队,取决客户端的实现。注意,当队列只有一个订阅者,避免由于处理逻辑不当造成死循环。 批量拒绝消息
消费者可以批量接受消息,如果这批消息都无法处理,或者都处理失败,可以批量拒绝消息。 消息接收数量
当一个队列有多个消费者订阅时,定义每个消费在下一个ack之前能接收的最大消息数量,可以实现消息的负载均衡和提高吞吐量。 消息属性
AMQP 0-9-1 规范定义消息有元数据和消息体,元数据就是消息的属性,比如: Content type Content encoding Routing key Delivery mode (persistent or not) Message priority Message publishing timestamp Expiration period Publisher application id
消息体就是发送到队列的具体数据,以二进制格式发送,broker接收到消息,不会处理它,根据客户端的设置,保存到磁盘或者内存。 函数列表
AMQP 0-9-1 定义了非常丰富的函数,比如跟exchange相关的如下: exchange.declare exchange.declare-ok exchange.delete exchange.delete-ok
完整的函数定义请参考官方 手册:https://www.rabbitmq.com/amqp-0-9-1-reference.htmlConnection
AMQP 0-9-1 规范定义了连接是建立在TCP的可靠性连接,并且是长连接。当一个客户端不需要连接Broker,AQMP 0-9-1 规范是应该关闭AMQP的连接,而不是底层的TCP连接。 Channel
客户端有可能需要和Broker建立多个连接,那么就需要建立多个TCP连接,而这是很消耗资源和时间的。所以AMQP 0-9-1 规范定义了通道,通道是建立在连接之上的,一个连接可以有多个通道。客户端需要建立多个连接时,可以创建多个通道,每个通过都有唯一的ID。
当连接关闭时,在这个连接之上的所有通过都会关闭。虚拟主机
这里的虚拟主机的概念是AQMP 0-9-1 中定义的,在一个Broker中(可以理解为一个服务)创建多个环境,用于资源隔离,每个环境中都有各自的Exchange、Bindings、Queue、用户、元数据等等,环境之间资源不会共享。
好了,以上就是关于AMQP 0-9-1 的介绍。
RabbitMQ系列文章会陆续更新,欢迎各位小伙伴关注后面的技术分享。
2023社会语录(一),句句精辟01hr结束友情的方式有许多种,最彻底的一种是借钱不还。02hr所谓门槛,能力够了就是门,能力不够就是槛。人生的沟沟坎坎,多半是能力不足所致。03hr不要总拿自己跟别人比。你羡慕别
奥尼尔满打满算,纵观NBA76年历史,能单防我的充其量只有5人奥尼尔认为,NBA76年历史,能单防我的只有5人,大梦邓肯霍华德尤因姚明,奥尼尔表示,大梦是历史第二中锋,邓肯精通身体对抗,霍华德篮下防守极具威慑力,尤因在力量上能够与我抗衡,姚明
苹果计划为iPhone配备屏下TouchID,真全面屏产品或在2026年出现苹果在2017年推出iPhoneX的时候,为了有更大的屏占比,取消了TouchID指纹模块,转而采用FaceID人脸识别技术。这不代表苹果完全放弃指纹识别,此前苹果被发现申请了一项
刘嘉玲晒合照珠光宝气好贵气,林子祥叶倩文合影状态佳!3月10日,刘嘉玲在自己的个人社交账号上晒出了自己的照片以及与朋友的合照。这是刘嘉玲在出席三八妇女节时的活动照片,刘嘉玲穿着黑色打底衫加打底裤,外加一件大红色渐变风衣外套,头发挽起
刘亦菲巴黎时装周干练帅气获好评星女郎黄圣依遭酸土味重刘亦菲(左)日前以一身黑色皮裙帅气登场巴黎时装周,过去常被说神似刘亦菲的黄圣依(右)也同场出席巴黎时装周日前盛大登场,艺人造型皆备受关注,其中出自同一位造型师的关晓彤和黄圣依服装和
爱的港湾文邪恶龙骑士风轻轻的吹过,我们的家,那是我们爱的港湾。那深情的过往,片片的回忆,时刻触动着我的身心。记忆中的你,很是纯洁。那片片的深情回眸。我看到你的微笑。那么的自信,那么的淳朴。
稻盛和夫的至理名言,让我们深刻认识人性01hr稻盛和夫的至理名言,成为很多成功人士的座右铭。1要想拥有一个充实的人生,你只有两种选择一种是从事自己喜欢的工作,另一种则是让自己喜欢上工作。第一种是一部分人能够做到,第二种
心眼坏,有痕迹有这些反常举动的人,再亲也害你著名作家东野圭吾在白夜行中写道人性这东西,不要对任何人抱有任何道德洁癖的希望,这个世界上每个人都是半人半鬼,凑得太近谁也没法看。在这个世界,有两样东西是不能直视的。一样东西是太阳,
从零开始的FIRE生活初中的时候读到一句离群索居者,非神即兽。在高中最痛苦的时间里,我偶遇了FIRE生活。FIRE是兴起于美国的运动,意思是财务独立,尽早退休。前阵子听到了退休要延期的消息。于是我又重新
你有多久没有做一件事达到忘我的状态了?坦白说,我也差不多有好几个月,没有体会过那种极度忘我的状态了。那种感觉真棒。错了,我应该是一直有体会这种状态的,只是我忽略了,忘记了这种感觉。这件事就是写作。忙完一天的工作,我爬到
走进隆回,与启辰SUV双子星一起探寻乡镇之美3月6日,东风日产启辰寻找快乐的小城生活SUV双子星试驾活动于湖南邵阳隆回县展开探寻。致力于制造快乐出行的东风日产启辰,将携启辰大V启辰星组成的SUV双子星一起,与全国媒体跨界达人
语录摘抄美文短句,给心灵放一个假1不开心睡一觉,就让它过去吧。伤心还好,伤胃就不好了。2轻柔的小雪花飘飘悠悠地落下来。渐渐地,小雪花变大了,变厚了,密密麻麻的。3寒雪寂寥初散后,春风悠飏欲来时。小屏闲放画帘垂。4
上场22分钟!22分14板6帽!世预赛波神爆发男篮世预赛激战正酣,欧洲区一场比赛,拉脱维亚11185大胜土耳其!代表拉脱维亚出战的波尔津吉斯表现出色,他打了22分钟,13投6中,三分7中3,罚球10中7,得到22分14板3助6
有这几个伤身的习惯,你要注意了长大之后才明白,身体无恙心中无事,这般,最佳。身体是自己的,只有自己注重自己身体的健康,方能避免病痛困扰。以下几个习惯,一旦发现自己有,就要警惕了第一,饮食不规律,伤及肠胃。人们总
肾病越来越多,自来水是祸根?提醒真正伤肾的是这4种习惯我得肾结石肯定是因为自来水喝多了医生正在和刘阿姨讨论病情导致的原因,刘阿姨说出了她心中的想法。因为我平时喝水都是拿电热水壶煮过再喝的,肯定是因为自来水中的水垢析出了,我喝下去之后在
欧冠H组赛程9月7日凌晨3点巴黎主场对尤文,11月3日尤文vs巴黎直播吧8月27日讯欧冠H组赛程与开赛时间今日公布,巴黎圣日耳曼尤文图斯本菲卡和海法马卡比同组。(注均为北京时间)第一轮,9月7日凌晨3点,巴黎vs尤文图斯本菲卡vs海法马卡比第二轮
王阳明先生的十句话最好要背下来王阳明1。欲修身,先修心心即理也,天下又有心外之事心外之理乎?译文心,即是理。天下难道还有心外之事心外之理吗?万事万物都在人心里,这个世界上没有心外之物。安顿好自己的心,修炼好这颗
塔尼蚀神之堕落Demo测评中规中矩的魂Like银河恶魔城游戏引入近年来,将魂系的高难度战斗要素融入类银河恶魔城游戏当中的操作并不少见。盐与避难所空洞骑士等优秀作品也已经充分地向玩家们证明了,两者的基因似乎原本就是天作之合,是注定就要融合在一
吃苹果应该注意什么?1要注意适量对于水果而言,中国居民膳食指南推荐每日食用200g350g,当这个量建议食用多种水果(3种以上)共同满足。从实际生活考虑,中等大小(200g300g左右)的苹果每日进食
手机被监听了怎么办?只要简单三步,摆脱烦恼今天我朋友跟我说现在这手机还怪厉害的哦,昨天才跟我男朋友说想换个手机,今天就给我推送这么多消息。还让我帮她看看哪一款好看。我醉了呀,这分明就是手机被监听了,要不他咋知道你需要啥呢?
泪目!80,90后的青春纪念册,都藏着这些旧手机里近段时间,朋友圈被一个叫重启旧手机的h5刷屏了,激起了不少人的回忆杀。按键机,翻盖机,全键盘机,滑盖机一玩才发现,原来我用过的手机还真不少,青春时期那些好笑又好哭的记忆,也随着这些
睡越少命越短家庭健康守护官睡越少,命越短如果每晚睡觉的时间少于六七个小时,你的免疫系统将会遭受破坏,罹患癌症的风险将会提高两倍以上。睡觉太少,让你感到饥饿的激素浓度会提升,而另一种告诉我们已经