amqp的通信机制,mqtt协议与消息队列的区别

amqp的通信机制,mqtt协议与消息队列的区别,高级消息队列协议AMQP简介

本文简要介绍了高级消息队列协议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的文章。希望对大家的学习有帮助,也希望大家多多支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: