全国统一咨询热线 13525000210  13598716545
资讯导航

物联网MQTT消息队列遥测传输

作者:dabangsoft
发布时间:2021-7-17

 MQTT协议最初由IBM公司于1999年开发,用于将石油管道上的传感器与卫星相连接。 2014年正式成为OASIS开放标准。MQTT使用类似MQ常用的发布/订阅模式,起到应用程序解耦,异步消息,削峰填谷的作用。很多MQ中间件也支持MQTT协议,比如ActiveMQ、 RabbitMQ、 HiveMQ、 WebSphereMQ等。

适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。
 
优势:
1.使用发布/订阅模式,提供一对多的消息发布,使消息发送者和接收者在时间和空间上解耦。
2.二进制协议, 网络传输开销非常小(固定头部是2字节)。
3.灵活的Topic订阅、 Qos、临终遗言等特性。
 
缺点:
1.集中化部署,服务端压力大,需要考虑流程控制及高可用。
2.对于请求/响应模式的支持需要在应用层根据消息ID做发布主题和订阅主题之间的关联

发布订阅模式
发布订阅模式区别于传统的客户端-服务器模式,它使发送消息的客户端(发布者)与接收消息的客户端(订阅者)分离,发布者与订阅者不需要建立直接联系。我们既可以让多个发布者向一个订阅者发布消息,也可以让多个订阅者同时接收一个发布者的消息,它的精髓在于由一个被称为代理的中间角色负责所有消息路由和分发的工作。传统的客户端-服务器模式可以实现类似的效果,但是无法做到像发布订阅模式这样简洁和优雅。
 
 
发布订阅模式的优点在于发布者与订阅者的解耦,这种解耦表现在以下两个方面:
 
空间解耦,订阅者与发布者不需要建立直接连接,新的订阅者想要加入网络时不需要修改发布者的行为。
时间解耦,订阅者和发布者不需要同时在线,即便不存在订阅者也不影响发布者发布消息。
消息路由
代理作为发布订阅模式的关键角色,它需要准确、高效地向订阅者转发其期望的消息,一般来说,比较常用的有以下两种方式:
 
根据主题。订阅者向代理订阅自己感兴趣的主题,发布者发布的所有消息中都会包含自己的主题,代理根据消息的主题判断需要将消息转发给哪些订阅者。
根据消息内容。订阅者定义其感兴趣的消息的条件,只有当消息的属性或内容满足订阅者定义的条件时,消息才会被投递到该订阅者。严格来讲,主题也可以算是消息内容的一种。
发布订阅模式的松耦合特性,也带来了一些副作用。由于发布者并不知晓订阅者的状态,因此发布者也无法得知订阅者是否收到了消息,或者是否正确处理了消息。这种情况下,想要保障交付往往需要更多的消息交互流程,例如,订阅者收到消息后向某个主题发送应答,发布者此时转变为订阅者等待应答。
 
MQTT
MQTT 协议根据主题而不是消息内容来分发消息,每个消息都包含一个主题,代理无需解析用户数据,这为实现一个通用的、与业务无关的 MQTT 代理提供了可能。用户也可以随意对自己的数据进行加密,这对于广域网通信是非常有用的。
 
MQTT 主题中可以有多个层级,并且允许对一个或多个层级进行模糊匹配,使客户端能够一次性订阅多个主题。关于 MQTT 主题的详细特性,我们会在后续的文章中专门进行介绍。
 
与消息队列相比,MQTT 并不要求发布或者订阅之前显式地创建主题,唯一可能造成的不良影响是客户端可能使用错误的主题而不自知,但显然灵活部署带来的收益更高。
 
既然提到了消息队列,那么正好解释一下 MQTT 与消息队列的区别。MQTT 并不是消息队列,尽管两者的很多行为和特性非常接近,比如都采用发布订阅模式等,但是他们面向的场景有着显著的不同。消息队列主要用于服务端应用之间的消息存储与转发,这类场景往往数据量大但接入量少,而 MQTT 面向的是 IoT 领域和移动互联网领域,这类场景的侧重点是海量的设备接入、管理与消息传输。在实际的场景中,两者往往被结合起来使用,譬如先由 MQTT Broker 接收物联网设备上传的数据,然后通过消息队列将这些数据转发到具体应用进行处理。


上一篇: 如何快速推广微信分销商城?
下一篇: