它现实了AMQP协议,并且遵循Mozilla Public License开源协议,它支持多种语言,可以方便的和spring集成
消息队列使用消息将应用程序连接起来,这些消息通过像RabbitMQ这样的消息代理服务器在应用程序之间路由
AMQP:advanced Message Queuing Protocol(高级消息队列协议)
2004年开发
从一开始就设计成为开发标准,以解决众多的消息队列需求和拓扑结构问题
凭借开放,任何人都可以执行这一标准,针对标准编码的任何人都可以和任意AMQP供应商提供的MQ服务器进行交互
兔子是行动非常迅速的动物而且繁殖起来也非常疯狂
(注:内容整理自《RabbitMQ实战》)
是一种基于代理的发布/订阅的消息协议。与请求/回答这种同步模式不同,发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。一个发布者可以对应多个订阅者,当发布者发生变化的时候,他可以将消息一一通知给所有的订阅者。这种模式提供了更大的网络扩展性和更动态的网络拓扑此外运用MQTT协议,设备可以很方便地连接到物联网云服务,管理设备并处理数据,最后应用到各种业务场景。2 、服务质量
MQTT提供三种质量的服务:
至多一次(qos = 0),可能会出现丢包的现象。使用在对实时性要求不高的情况。这一级别可应用于如下情景,如环境传感器数据,丢失一次读记录无所谓,因为很快下一次读记录就会产生。
至少一次(qos = 1),保证包会到达目的地,但是可能出现重包。
正好一次(qos = 2),保证包会到达目的地,且不会出现重包的现象。这一级别可用于如计费系统等场景,在计费系统中,消息丢失或重复可能会导致生成错误的费用。
3 、主题与通配符
主题名称(Topic name)用来标识已发布消息的信息的渠道。订阅者用它来确定接收到所关心的信息。它是一个分层的结构,用斜线“/”作为分隔符(这个有点类似于restful风格)。主题还可以通过通配符进行过滤。其中,+可以过滤一个层级,而#只能出现在主题最后表示过滤任意级别的层级。值得注意的是MQTT允许使用通配符订阅主题,但是并不允许使用通配符广播。
4、 遗嘱
当一个客户端断开连接的时候,它希望客户端可以发送它指定的消息。该消息和普通消息的结构相同。通过设置该位并填入和信息相关的内容即可(后面会有介绍)。
5、 消息类型
消息类型 类型 编码说明
reserved 0保留
connect1 客户端到服务端的连接请求
connACK 2 服务端对连接请求的响应
publish3 发布消息
puback 4 新发布消息确认,是QoS 1给PUBLISH消息的回复
pubRec 5 QoS 2消息流的第一部分,表示消息发布已记录
pubRel 6 QoS 2消息流的第二部分,表示消息发布已释放
pubComp 7 QoS 2消息流的第三部分,表示消息发布完
subscribe 8客户端订阅某个主题
subBack9 对于SUBSCRIBE消息的确认
unsubscribe 10客户端终止订阅的消息
unsubBack 11对于UNSUBSCRIBE消息的确认
pingReq 12 心跳
pingResp 13 确认心跳
disconnect 14客户端终止连接前通知MQTT代理
reserved 15保留
二、MQTT 服务端(实现MQTT协议的中间件)
MQTT协议有很多开源的broker可以用,这里我整理了两个,分别是Apollo和mosquito;详细的服务端选择可以去上面的服务端链接中选。以下所讲的环境配置和服务器搭建都是在MAC环境上,其他平台的可以参见选用broker的详细文档。
1、Apollo-Broker搭建
Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持多种协议,如:STOMP、AMQP、MQTT、SSL等。
1.生产者:创建消息,发布消息到代理服务器(RabbitMQ)(1)消息:有效荷载和标签
(2)有效荷载:消息的内容
(3)标签:用来描述消息(交换器的名称或者可选主题的标记),然后把消息交由RabbitMQ,由RabbitMQ进行后续处理
2.消费者:连接到代理服务器(RabbitMQ),并订阅到队列(queue)上,接收代理服务器发布的消息并读取
(1)接收到的消息只包括有效荷载,即消息内容
1.基本原理:首先创建一条TCP连接,TCP连接打开后(即通过认证),应用程序创建一条AMQP信道。
2.信道:是建立在真实的TCP连接内的虚拟连接,AMQP命令是通过信道发送出去
3.应用程序和RabbitMQ代理之间的连接用信道而不直接用TCP连接的原因
(1)一个信道处理一个线程,一个TCP连接可以承载多个信道,即多个线程可以使用同一个TCP连接,减少资源消耗,避免性能瓶颈
(2)一个TCP的创建和销毁对资源的消耗会很大,创建需要三次握手,销毁需要四次挥手。
4.TCP协议的三次握手和四次分手
(1)建立连接的三次握手:
-第一次握手:客户端发送给服务端,请求连接
-第二次握手:服务端接收到客户端发送的请求连接的消息,回复给客户端请求连接
-第三次握手:上述两次握手本质上已经建立连接,但是此时客户端还会发送给服务端一个消息,确认连接,即表示连接成功
(2)销毁连接的四次挥手:
-第一次挥手:客户端发送给服务端,断开连接
-第二次挥手:服务端接收到请求断开连接的请求,发送确认消息
-第三次挥手:服务端发送给客户端,断开连接
-第四次挥手:客户端接收到服务端的消息,确认断开连接
注意:销毁连接需要四次挥手是因为TCP连接是双向连接,断开也需要双向断开和确认
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)