消息队列遥测传输
IoT 和M2M 相关技术需要使用一种传递和连接的方式来远程传递和接受信息。
我们希望这种协议满足以下要求:
- 占用空间小
- 功耗小
- 带宽占用小
- 延迟小
- 发布-订阅
MQTT协议
百度百科的解释:
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
简单来说:
MQTT是由 IBM 开发并于 1999 年首次发布的轻量级消息传递协议。它使用发布/订阅模式并在设备、服务器和应用程序之间转换消息。
MQTT 协议最初是为了将石油管道上的传感器与通信卫星连接起来而创建的信息传递协议,能最大限度地减少电池损耗和带宽消耗。
自发布后,MQTT 一直在不断发展,2018 年 5 月发布了 5.0 版。3.1.1 版于 2013 年提交给 OASIS 联盟并被接受为 ISO 国际标准。
MQTT架构
MQTT 协议中的连接设备称为“客户端”,它们与称为“代理”的服务器进行通信。代理处理客户端之间的数据传输任务。
每当客户端(称为“发布者”)想要分发信息时,它将发布到特定主题信息,然后代理将此信息发送给订阅该主题信息的任何客户端(称为“订阅者”)。
发布者不需要任何关于订阅者数量或位置的数据。反过来,订阅者不需要关于发布者的任何数据。任何客户端都可以是发布者、订阅者或两者。客户通常不知道彼此,只知道充当中介的经纪人。这种设置通常被称为“发布/订阅模式”。
MQTT 消息
当客户端想要向代理发送数据时,这称为“发布”。当客户端想要从代理接收数据时,它会“订阅”一个或多个主题。当客户端订阅某个主题信息时,它将接收在该主题信息上发布的所有消息。
除了消息本身,发布者还发送 QoS(服务质量)级别。此级别定义了消息的传递的保障程度。这些 QoS 级别如下:
- 最多一次:当消息发布时,代理只会“最多一次”收到消息。此级别不应用于关键任务信息,因为它会带来订阅者无法收到消息的风险。
至少一次:发布者继续重新发送消息,直到它从代理收到关于特定消息的确认。换句话说,接收消息比确保只接收一次更重要。这可能是最常用的 QoS 级别。
各自确认一次:发布者和代理一起工作,以确保代理将接收并处理一条消息恰好一次。这需要以四部分握手的形式出现一些额外的开销。尽管这是最安全的 QoS 级别,但它也是最慢的,因此仅在必要时使用。
MQTT用途
举个例子:
一家生产汽车电池的公司希望提供更先进的高科技电池,以销售给全国的客户。这些生产好的电池放入库存上,为了不让生产早的电池在库存中放置太久,需要将生产日期早的电池先销售出去,也就是先进先出。
于是在公司的电池和仓库中安装物联网传感器。这些传感器通过 MQTT 将信息传输到服务器。每个电池都有一个信号发射设备,可发送蓝牙信号以传达其在仓库中是否存在的信息。此外,单个电池供电的集线器每天唤醒一次,以便使用 MQTT(以及用于安全传输的 TLS 协议)将信息传输到 服务器 。
MQTT优点
- 代码量小:设备只需几行代码即可启动并运行 MQTT 协议。
数据包小: MQTT 非常节能。如果设备由电池供电或 CPU 功率很小,这很好。
速度快: MQTT 实时运行,在 QoS 之外没有延迟。
集成方便: MQTT 已经拥有Elixir和Python等编程语言的库。
错误纠正:如果客户端意外断开连接,您可以设置发送给所有订阅者的消息指令,以纠正这种情况。
消息留存机制:每个主题信息都可以有一条保留消息,客户端在订阅时会自动接收该消息
与其他协议比对
XMPP
XMPP(Extensible Messaging and Presence Protocol)是一种基于 XML 语言的通信协议,用于存储和传输数据。它经常用于为 Jabber 等即时消息服务提供支持。
XMPP 和 MQTT 简单区别:
- XMPP 代码占用空间大,需要 XML 解析器来编码和解码信息。
默认情况下,XMPP 不支持发布/订阅模式,只能可以通过扩展来支持。
XMPP 比 MQTT 占用的带宽大。
HTTP/HTTPS
HTTP(超文本传输协议)及其扩展 HTTPS(安全超文本传输协议)是作为万维网基础的通信协议。但是,它们是无状态的,每次传输的开销比 MQTT 多。此外,HTTPS 的吞吐量比 MQTT 低,这意味您无法在同一时间段内发送很多的消息请求。
结论
MQTT协议更适合小设备、小功耗、小型通讯设备的消息通讯。
code enjoy!😜😜😜
作者:indeex
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。