您现在的位置是:网站首页> 编程资料编程资料
高级消息队列协议AMQP简介_其它综合_
2023-05-27 80人已围观
简介 高级消息队列协议AMQP简介_其它综合_
历史:
Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the information bus(TIB)。 TIB被电信和通讯公司采用,路透社收购了Teknekron公司。之后,IBM开发了MQSeries,微软开发了Microsoft Message Queue(MSMQ)。这些商业MQ供应商的问题是厂商锁定,价格高昂。2001年,Java Message queuing试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了。
于是2004年,摩根大通和iMatrix开始着手Advanced Message Queuing Protocol (AMQP)开放标准的开发。2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。
基本概念
AMQP基本模型如下图所示:
Broker:
接收和分发消息的应用,如RabbitMQ Server就是Message Broker。
Virtual host:
出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。
Exchange
交换器是消息送达的实体。他是具名的,它是消息的第一站。系统根据分发规则,匹配查询表中的routing key,分发消息到queue中去。
属性:
durable:该交换器将在broker重启后生效。
auto-delete:该交换器将在没有消息队列绑定时自动删除。一个从未绑定任何队列的交换器不会自动删除。
类型:
direct (point-to-point)
fanout (multicast)
topic (publish-subscribe)
Queue
队列是接收消息的实体,具有名字和属性,但没有类型。客户端可以订阅队列以便使broker递送某消息队列的内容到该客户端。
属性:
alternate-exchange :当消息被订阅者拒绝或者由于队列被删除而孤立时则被送往此交换器,同时队列中的该消息被删除。
passive :当队列不存在时会抛出一个错误信息,仍然不会被声明。
durable :队列将在broker重启时启动。
exclusive :队列仅服务于一个客户端。
auto-delete :队列在没有活跃订阅者的时候将自动删除。当客户端终结时,exclusive类型的队列则一定会自动删除。
Binding
绑定是队列和交换器之间的关系,规定消息如何由交换器到队列。绑定的属性被交换器用来与路由算法匹配。
当一个消息的路由关键字与绑定中的模式匹配时,交换器会把该消息的拷贝送达队列。如何进行匹配仅依赖于交换器的类型:
direct型 :消息的路由关键字与绑定相同。
fanout型 :总是匹配,即使绑定无关键字。
topic型 :匹配路由关键字属性,字符串的各个部分以'.'分隔。可包含两个特殊字符:'*'表示单个任意词,'#'表示0个或多个词,例如 *.stock.# 匹配usd.stock和eur.stock.db,但不匹配stock.nasdaq。
headers型 :匹配各个键-值对的逻辑组合结果。
Connection:
publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题。
Channel:
如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。
Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。
到此这篇关于高级消息队列协议AMQP的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- Windows下使用Gogs搭建Git服务器_其它综合_
- HTTP协议详细介绍_其它综合_
- Caffe图像数据转换成可运行leveldb lmdb文件_其它综合_
- Dart 异步编程生成器及自定义类型用法详解_Dart_
- Flutter入门学习Dart语言变量及基本使用概念_Dart_
- Flutter 语法进阶抽象类和接口本质区别详解_Dart_
- Android开发中Dart语言7个很酷的特点_Dart_
- 谷歌Sky语言怎么样?什么是Dart编程语言?_Dart_
- 自动切换能播放音乐列表 vbs_网页播放器_
- 网页播放器的参数含义 Windows Media Player 网页播放器 参数含义_网页播放器_
点击排行
- TYSB手游公测版下载-TYSB官方唯一正版手游下载 _安卓网
- 青云传之琉璃梦手游下载-青云传之琉璃梦官方版下载 v5.7.0安卓版_安卓网
- 爆枪突击专用修改器下载-爆枪突击无限兑换码 v1.0.0.3辅助修改_安卓网
- 丛林动物宝宝发型沙龙游戏-丛林动物宝宝发型沙龙(休闲装扮)Baby Jungle Animal Hair Salon v1.0.10_安卓网
- 洗牌猫下载-洗牌猫(卡牌对战)Shuffle Cats v0.14.8_安卓网
- 终极奥特超人50周年版下载-终极奥特超人50周年版(奥特曼正版授权) v2.3_安卓网
- project h手机|project h安卓-project h手机版(虚拟空间女友)预约 v1.0_安卓网
- project h试玩版-project h手游试玩版预约 v1.0_安卓网