本文简要介绍了高级消息队列协议AMQP,对大家的学习或工作有一定的参考价值。让我们和边肖一起学习。
历史:
对消息队列的需求由来已久。20世纪80年代,高盛和其他公司首次在金融交易中采用Teknekron的产品。当时,消息队列软件被称为信息总线(TIB)。TIB被电信和通信公司采用,路透社收购了Teknekron。之后,IBM开发了MQSeries,微软开发了微软消息队列(MSMQ)。这些商业MQ供应商的问题是厂商被套牢,价格高。2001年Java消息队列试图解决加锁和交互性的问题,但是用起来比较麻烦。
因此,2004年,摩根大通和iMatrix开始开发高级消息队列协议(amqp)的开放标准。2006年,AMQP规范发布。2007年,兔子科技公司基于AMQP标准开发的RabbitMQ 1.0发布。
基本概念
AMQP的基本模型如下图所示:
Broker:接收和分发消息的应用程序,比如RabbitMQ服务器,就是Message Broker。
Virtual host:出于多租户和安全性的考虑,AMQP的基本组件被划分到一个虚拟分组中,类似于网络中的名称空间概念。
Exchange交换机是接收消息的实体。他被点名了,而且是新闻的第一站。根据分发规则,系统在查询表中匹配路由关键字,并将消息分发到队列中。
属性:
持久:该开关将在代理重新启动后生效。
自动删除:当没有消息队列绑定时,此开关将被自动删除。从未绑定到任何队列的交换机不会被自动删除。
类型:
直接(点对点)
扇出(多播)
主题(发布-订阅)
Queue队列是接收消息的实体。它有名称和属性,但没有类型。客户端可以订阅队列,以便代理可以将消息队列的内容传递给客户端。
属性:
Alternate-exchange:当消息被订阅者拒绝或由于删除队列而被隔离时,该消息被发送到此exchange,同时队列中的消息也被删除。
Passive:当队列不存在时会抛出一个错误消息,仍然不会声明。
持久:队列将在代理重新启动时启动。
Exclusive:队列只为一个客户服务。
自动删除:当没有活动订户时,队列将被自动删除。当客户端终止时,独占队列将被自动删除。
Binding绑定是队列和交换机之间的关系,它指定消息如何从交换机传输到队列。交换机使用绑定的属性来匹配路由算法。
当消息的路由关键字与绑定中的模式匹配时,交换机将向队列发送消息的副本。如何匹配仅取决于开关的类型:
Type direct:消息的路由键与绑定的路由键相同。
Out type:总是匹配,即使绑定没有关键字。
主题:匹配路由关键字的属性,字符串的各个部分由“.”分隔。可以包含两个特殊字符: * 表示单个任意单词, # 表示0个或多个单词,例如,*.stock.#匹配usd.stock和eur.stock.db,但不匹配stock.nasdaq。
头类型:匹配每个键值对的逻辑组合结果。
Connection:发布者/消费者和代理之间的TCP连接。断开连接将只在客户端执行,代理不会断开连接,除非出现网络故障或代理服务出现问题。
Channel:如果每次访问RabbitMQ都建立一个连接,那么在消息量很大的情况下建立TCP连接的开销会很大,效率也会很低。
信道是在连接中建立的逻辑连接。如果应用程序支持多线程,每个线程通常会创建一个单独的通信通道。AMQP方法包含通道id来帮助客户端和消息代理识别通道,因此通道是完全隔离的。作为一种轻量级连接,Channel大大降低了操作系统中建立TCP连接的开销。
这就是关于高级消息队列协议AMQP的文章。希望对大家的学习有帮助,也希望大家多多支持。