​什么是 MQTT 代理MQTT是一种支持物联网 (IoT) 的轻量级协议。

 

MQTT 代理是使MQTT 客户端能够进行通信的中介实体。

MQTT 代理充当中央枢纽,有效处理设备和应用程序之间的消息流。具体来说,MQTT 代理接收客户端发布的消息,按主题过滤消息,并将其分发给订阅者。

使用 MQTT 代理来启用发布/订阅 (pub/sub) 通信模型有助于使 MQTT 成为高效且可扩展的协议。

这种以代理为中介的通信为设备提供了一种轻量级、可扩展且可靠的机制,可以在网络环境中共享信息,在建立高效、响应迅速的物联网生态系统和其他分布式应用程序中发挥着至关重要的作用。

为什么 MQTT 代理很重要?

MQTT 代理在 MQTT 架构中起着至关重要的作用,因为它负责促进 MQTT 客户端(发布者和订阅者)之间的通信。

以下是 MQTT 代理很重要的一些主要原因:

  • 消息路由:MQTT 代理从发布者接收消息,并根据主题订阅将它们路由到适当的订阅者。这确保了消息的高效、准确传递,而无需客户端相互建立直接连接。

  • 可扩展性:MQTT 代理可以处理大量同时连接,这对于 IoT 和 M2M 通信场景至关重要,这些场景中可能有数千甚至数百万个连接设备。代理管理这些连接和消息的能力使 MQTT 协议能够有效扩展。

  • 安全性:MQTT代理可以提供身份验证和加密等安全措施,以确保物联网设备和应用程序之间传输的数据安全。了解更多信息:有关 MQTT 安全性 2024 的 7 个基本知识。

  • 集成:MQTT代理可以与其他通信协议和云平台集成,提供完整的物联网解决方案。例如,MQTT 代理可以与 AWS IoT、Google Cloud IoT 或 Microsoft Azure IoT Hub 集成,以提供无缝的 IoT 生态系统。

  • 会话管理:MQTT 代理负责管理客户端会话,包括维护有关客户端订阅的信息以及处理保留以在客户端上线时传递给客户端的消息。此会话管理功能可确保当客户端断开连接并稍后重新连接到代理时消息不会丢失。了解更多信息:MQTT 持久会话和清理会话解释。

MQTT 代理架构

MQTT 代理架构基于发布-订阅消息传递模式,它将消息生产者(发布者)与消息消费者(订阅者)解耦。该架构包括三个主要组件:客户端、主题和代理。

  • MQTT 代理服务器

    MQTT 代理是一个服务器,它接收来自发布者的消息,并根据订阅者的主题订阅将消息传递给订阅者。它管理客户端连接,处理订阅和取消订阅,并确保根据指定的服务质量 (QoS) 级别传递消息。

  • MQTT 客户端

    MQTT 客户端可以是发布者、订阅者或两者。发布者将消息发送到 MQTT 代理,而订阅者从代理接收消息。客户端可以是任何可以使用 MQTT 协议与 MQTT 代理建立连接的设备或应用程序,例如 IoT 设备、移动应用程序或其他服务器。

  • 主题

    主题是定义消息主题或类别的分层字符串。当发布者向代理发送消息时,他们会将消息与特定主题相关联。订阅者通过订阅一个或多个MQTT 主题来表达他们对接收消息的兴趣。然后,代理根据主题订阅将消息路由到适当的订阅者。

MQTT 代理架构可以是集中式的,也可以是分布式的。在集中式架构中,单个代理处理客户端之间的所有通信。在分布式架构中,多个代理协同工作以提供可扩展且容错的消息传递基础架构。分布式架构中的每个代理都可以与其他代理协调来管理消息路由,确保消息传递到预期的接收者。

总体而言,MQTT 代理架构提供了灵活高效的消息传递基础架构,使设备和应用程序能够安全、高效、大规模地进行通信。MQTT 代理:工作原理、热门选项和快速入门

流行的开源 MQTT 代理

EMQX

EMQX是目前适用于 IoT 应用程序的最具可扩展性的 MQTT 代理。它以亚毫秒级延迟在一秒内处理数百万条 MQTT 消息,并允许在单个集群内超过 1 亿个客户端之间进行消息传递。EMQX 兼容 MQTT 5.0 和 3.x。它非常适合分布式物联网网络,可以在云、Microsoft Azure、Amazon Web Services 和 Google Cloud 上运行。代理可以通过 TLS/SSL 实现 MQTT,并支持 PSK、JWT 和 X.509 等多种身份验证机制。与 Mosquitto 不同,EMQX 支持通过 CLI、HTTP API 和仪表板进行集群。

Eclipse Mosquitto

Eclipse Mosquitto是适用于 MQTT 协议版本 5.0、3.1.1 和 3.1 的开源 MQTT 代理。Mosquitto 重量轻,可以安装在低功耗单板计算机或企业服务器上。该代理是用 C 编程语言编写的,可以通过 C 库在 MQTT 客户端上实现。可以下载适用于 Windows、Mac、Linux 和 Raspberry Pi 的版本。准备安装的二进制文件适用于所有操作系统。最新版本包括身份验证和授权插件“mosquitto-go-auth”,这是一个用于管理 Mosquitto 实例的 Web 用户界面。它还提供了一个 PHP 包装器“Mosquitto-PHP”,用于在 PHP 中创建 MQTT 客户端。

NanoMQ

NanoMQ是专为物联网边缘设计的轻量级快速 MQTT 代理。NanoMQ 采用纯 C 语言实现,基于 NNG 的异步 I/O 和多线程Actor 模型,完全支持 MQTT 3.1.1 和 MQTT 5.0 协议版本。NanoMQ 在独立代理环境中具有高性能。令人着迷的优点是它的便携性。它可以部署在任何兼容 POSIX 的平台上,并运行在 x86_64、ARM、MIPS 和 RISC-V 等不同的 CPU 架构上。

VerneMQ

VerneMQ项目于2014年启动,最初由Erlio GmbH开发。正如第二个经纪人在 Erlang/OTP 中所写的那样,该项目在 Apache Version 2.0 下获得许可,并从 EMQX 项目中借用了一些代码。

在架构设计上,VerneMQ支持LevelDB中的MQTT消息持久化,并采用基于Plumtree库的集群架构,实现了Epidemic Broadcast Trees算法。