你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 事件网格的 MQTT 代理功能概述

MQTT 客户端可以通过 Azure 事件网格相互通信以及与 Azure 服务通信,以支持物联网 (IoT) 解决方案。

Azure 事件网格的 MQTT 代理功能使你能够实现以下场景:

  • 使用多对一消息传递模式引入遥测数据。 此模式使应用程序能够将大量设备连接的管理工作负担分散到事件网格。
  • 使用请求-响应(一对一)消息传递模式控制 MQTT 客户端。 无论客户端的角色如何,此模式都可让任何客户端不受限制地与任何其他客户端通信。
  • 使用一对多消息传递模式向客户端群广播警报。 此模式使应用程序能够仅发布一条消息,服务将为每个相关客户端复制该消息。
  • 通过 HTTP 推送传递功能将 MQTT 消息路由到 Azure 服务和 Webhook,从而集成来自 MQTT 客户端的数据。 通过与 Azure 服务的这种集成,可以生成首先从 IoT 设备引入数据的数据管道。

可以在此存储库中找到演示这些方案的代码示例。

MQTT 代理非常适合实现汽车和运输等方案。 请参阅参考体系结构,了解如何构建安全且可缩放的解决方案,以便使用 Azure 的消息传送和数据分析服务将数百万辆汽车连接到云。

High-level diagram of Event Grid that shows bidirectional MQTT communication with publisher and subscriber clients.

关键概念

下面是 Azure 事件网格 MQTT 代理功能中涉及的关键概念列表。

MQTT

MQTT 是一种发布-订阅消息传输协议,专为受限环境而设计。 由于其高效性、可扩展性和可靠性,它是 IoT 方案的首选通信标准。 MQTT 代理允许客户端通过 MQTT v3.1.1、基于 WebSocket 的 MQTT v3.1.1、MQTT v5 和基于 WebSocket 的 MQTT v5 协议发布和订阅消息。 以下列表显示了 MQTT 代理的一些功能亮点:

  • MQTT v5 功能:

    • 用户属性:用于在消息标头中添加自定义键值对,以提供有关消息的更多上下文。 例如,包含消息的目的或来源,使接收方可以有效地处理消息。
    • 请求-响应模式:使客户端能够利用标准的请求-响应异步模式,并在请求中指定响应主题和相关 ID,以便客户端在未经事先配置的情况下做出响应。
    • 消息过期间隔:用于向 MQTT 代理声明何时忽略不再相关或不再有效的消息。 例如,忽略陈旧的命令或警报。
    • 主题别名:帮助客户端减小主题字段的大小,从而减少数据传输开销。
    • 最大消息大小:使客户端能够控制它们可以从服务器处理的最大消息大小。
    • 最大接收大小:使客户端能够根据其功能(例如处理速度或存储功能)控制消息速率。
    • 全新启动和会话过期:使客户端能够按照可配置的时间间隔保留客户端的订阅信息和消息,从而优化会话的可靠性和安全性。
    • 否定确认:使客户端能够有效地对不同的错误代码做出反应。
    • 服务器发送的断开连接数据包:使客户端能够有效地处理断开连接。
  • MQTT 代理将来会添加更多 MQTT v5 功能,以便与 MQTT 规范更相符。 以下项目详细介绍了 MQTT 代理和 MQTT v5 规范支持的功能之间的当前差异:不支持Will 消息、保留标志、消息排序和 QoS 2。

  • MQTT v3.1.1 功能:

    • 持久会话:通过在客户端断开连接时保留客户端的订阅信息和消息来确保可靠性。
    • QoS 0 和 1:让客户端可以控制通信的效率和可靠性。
  • MQTT 代理将来会添加更多 MQTT v3.1.1 功能,以便与 MQTT 规范更相符。 以下项目详细介绍了 MQTT 代理和 MQTT v3.1.1 规范支持的功能之间的当前差异:不支持Will 消息、保留标志、消息排序和 QoS 2。

详细了解 MQTT 代理和当前限制。

发布-订阅消息传递模型

发布-订阅消息传递模型为客户端提供可缩放的异步通信。 它使客户端能够将大量连接和消息的处理工作负担分散到服务。 通过发布-订阅消息传递模型,客户端可以使用一对多、多对一和一对一消息传递模式有效地进行通信。

  • 一对多消息传递模式使客户端能够只发布一条消息,服务将为每个相关客户端复制该消息。
  • 多对一消息传递模式使客户端能够将大量连接的管理工作负担分散到 MQTT 代理。
  • 无论客户端的角色如何,一对一消息传递模式都可让任何客户端不受限制地与任何其他客户端通信。

命名空间

事件网格命名空间是支持 MQTT 代理功能的资源以及支持拉取传递功能的资源的管理容器。 MQTT 客户端可以连接到 MQTT 代理并发布/订阅消息,而 MQTT 代理会对客户端进行身份验证、授权发布/订阅请求,并将消息转发到相关的客户端。 详细了解命名空间的概念

客户端

客户端是指发布和订阅 MQTT 消息的 IoT 设备或应用程序。

IoT 设备是连接到 Internet 以传输遥测数据和接收命令的物理对象。 这些设备可以是传感器、装置、机器或其他配备嵌入式传感器和软件的对象。 传感器和软件使它们能够彼此或者与周围环境通信和交互。 IoT 设备的价值在于它们能够提供实时数据和见解,使企业和个人能够做出明智的决策并提高效率和生产力。

IoT 应用程序是设计用于与 IoT 设备交互及处理其中的数据的软件。 它们通常包含数据收集、处理、存储、可视化和分析等组件。 这些应用程序使用户能够监视和控制连接的设备、自动执行任务并从 IoT 设备生成的数据中获得见解。

客户端身份验证

事件网格有一个客户端注册表,用于存储有关有权连接到事件网格的客户端的信息。 在某个客户端可以连接到事件网格之前,客户端注册表中必须有该客户端的条目。 当客户端连接到 MQTT 代理时,它需要根据存储在标识注册表中的凭据向 MQTT 代理进行身份验证。 MQTT 代理支持 X.509 证书身份验证(IoT 设备中的行业身份验证标准)和 Microsoft Entra ID(Azure 的应用程序身份验证标准)。详细了解 MQTT 客户端身份验证

访问控制

考虑到 IoT 环境的巨大规模和受限设备的独特安全挑战,访问控制对于 IoT 方案至关重要。 事件网格通过灵活访问控制模型提供基于角色的访问控制 (RBAC),使你能够管理客户端发布或订阅主题的授权。

鉴于 IoT 环境的巨大规模,为每个客户端分配对每个主题的权限极其繁琐。 事件网格的灵活访问控制通过将客户端和主题分组到客户端组和主题空间中来应对这种规模挑战。 创建客户端组和主题空间后,可以配置权限绑定,以授予客户端组发布或订阅主题空间的访问权限。

Diagram of the access control model.

主题空间还允许控制客户端组中每个客户端发布或订阅其自己的主题的授权,从而提供精细访问控制。 这种精细访问控制是通过在主题模板中使用变量来实现的。 详细了解访问控制

路由

事件网格允许将 MQTT 消息路由到 Azure 服务或 Webhook 以进一步处理。 相应地,你可以通过将 IoT 数据用于数据分析、存储和可视化及其他用例来生成端到端解决方案。 通过路由配置,可以将所有 MQTT 消息从客户端发送到事件网格命名空间主题事件网格自定义主题。 消息进入主题后,可以将事件订阅配置为使用主题中的消息。 例如,借助此功能,可以使用事件网格将来自 IoT 设备的遥测数据路由到事件中心,然后路由到 Azure 流分析,以从设备遥测数据中获取见解。 详细了解路由

Diagram of the MQTT message routing.

边缘 MQTT 代理集成

事件网格与 Azure IoT MQ 集成,以将边缘的 MQTT 代理功能与云中 Azure 事件网格的 MQTT 代理功能连接起来。 Azure IoT MQ 是用于边缘计算的新型分布式 MQTT 代理,可在已启用 Arc 的 Kubernetes 群集上运行。 它可以通过利用系统分配托管标识实现的 Microsoft Entra ID(以前称为 Azure Active Directory)身份验证连接到事件网格 MQTT 代理,从而简化凭据管理。 Azure IoT MQ 为 IoT 设备和应用程序提供高可用性、可伸缩性和安全性。 它现在已作为 Azure IoT 操作的一部分以公共预览版提供。 详细了解如何将 Azure IoT MQ 连接到 Azure 事件网格的 MQTT 代理

MQTT 客户端生命周期事件

客户端生命周期事件允许应用响应客户端连接状态或客户端资源操作的相关事件。 它使你能够跟踪客户端的连接状态、对客户端连接断开做出缓解操作,并跟踪客户端在自动故障转移期间附加到的命名空间。 详细了解 MQTT 客户端生命周期事件

后续步骤

使用以下文章详细了解 MQTT 代理及其主要概念。

概念