跳转至

消息队列遥测传输 (MQTT)

什么是 MQTT?

MQTT 是一个轻量级的发布/订阅消息传输协议,专为低带宽环境下的 M2M (机器到机器) 遥测而设计。它由 Dr. Andy Stanford-Clark (IBM) 和 Arlen Nipper 在 1999 年发明,并于 2014 年成为 OASIS 标准。

MQTT 特性

  • 轻量级: MQTT 被设计用于低带宽、高延迟的网络中。它是一个发布/订阅、极其简单和轻量级的消息传输协议,专为受限设备和低带宽、高延迟或不可靠网络而设计。设计原则是在尽量减少网络带宽和设备资源需求的同时,也试图确保可靠性和一定程度的传输保证。这些原则也使得协议非常适合新兴的连接设备的 "机器对机器" (M2M) 或 "物联网" 世界,以及带宽和电池电量都很宝贵的移动应用。

  • 发布/订阅: MQTT 基于发布/订阅模型。这使得它非常适合物联网消息传输,例如低功耗传感器或手机、嵌入式计算机或微控制器等移动设备。

  • 异步: MQTT 是一种异步协议。MQTT 客户端可以发送消息并继续其他处理,当消息可用时,消息将被传递给客户端。

  • QoS: MQTT 支持三种质量服务,用于客户端和服务器之间的消息传递: "最多一次"、"至少一次" 和 "只有一次"。可以通过 "至少一次" 或 "只有一次" 模式实现可靠性,但这不是默认设置。例如,传感器可能只需要在值发生变化时发送读数,但执行器可能需要接收每条消息,以确保它具有最新的控制信息。

  • 保留消息: MQTT 支持保留消息。这是 MQTT 协议的一个有用的特性。它允许客户端发布一个消息,该消息由服务器存储,并发送给任何将来订阅匹配主题的订阅者。这对于诸如状态更新之类的消息非常有用,其中客户端可以发布对状态主题的更新,任何新连接的客户端都将接收到最新的更新。

  • 小代码占用: 整个 MQTT 协议规范在大约 30 页文本中进行了记录。这使得它非常适合需要保持功耗的移动设备,例如手机,或者内存非常宝贵的嵌入式设备。

  • 开放协议: MQTT 是一种开放协议,因此没有版税。它也是一个 OASIS 标准。

工作范式

MQTT 是一种发布/订阅消息传输协议。它专为需要 "小代码占用" 或网络带宽有限的远程位置连接而设计。发布/订阅消息模式需要消息代理。代理负责根据消息的主题将消息分发给感兴趣的客户端。

关键角色

  • 发布者: 发布者是连接到代理的应用程序。它创建并发送消息。消息的内容完全由发布者决定。代理将消息分发给感兴趣的订阅者。

  • 订阅者: 订阅者是连接到代理的应用程序。订阅者可以指定它感兴趣的主题。代理将仅分发对订阅者感兴趣的消息。

  • 代理: 代理是处理发布者和订阅者之间消息传递的中间件。Eclipse Mosquitto 代理是开源的,可以从 GitHub 上的 Mosquitto 项目页面下载。

MQTT 服务器

EMQ X

EMQ X 是一个开源的 MQTT 代理,它实现了 MQTT 版本 5.0、3.1.1 和 3.1 协议。它是一个高度可扩展的代理,可以在云中运行。它是一个开源项目,可以在 EMQ X 项目页面上找到。

Mosquitto

Mosquitto 是一个开源的消息代理,它实现了 MQTT 版本 5.0、3.1.1 和 3.1 协议。它是一个轻量级的代理,可以在 Raspberry Pi 等低功耗设备上运行。它是一个开源项目,可以在 Eclipse Mosquitto 项目页面上找到。

HiveMQ

HiveMQ 是一个商业 MQTT 代理,它实现了 MQTT 版本 5.0、3.1.1 和 3.1 协议。它是一个高度可扩展的代理,可以在云中运行。它是一个商业产品,可以在 HiveMQ 网站上找到。

MQTT 客户端 - (发布者和订阅者)

Paho

Paho 是一个开源的 MQTT 客户端库。它可用于多种编程语言,包括 Java、JavaScript、C、C++、Python、Go、Ruby 和 C#。它是一个开源项目,可以在 Paho 项目页面上找到。

EMQ X

EMQ X 是一个开源的 MQTT 客户端库。它可用于多种编程语言,包括 Java、JavaScript、C、C++、Python、Go、Ruby 和 C#。它是一个开源项目,可以在 EMQ X 项目页面上找到。

MQTT.js

MQTT.js 是一个开源的 MQTT 客户端库。它可用于 JavaScript。它是一个开源项目,可以在 MQTT.js 项目页面上找到。