你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 事件网格现在支持通过 HTTP 发布消息队列遥测传输 (MQTT) 消息。 事件网格使后端系统能够将消息发送到设备,而无需维护持久的 MQTT 连接。 此方法简化了偏好无状态通信的应用程序的集成。 它使用具有 Microsoft Entra ID 的安全身份验证,并向 MQTT 客户端提供可缩放的可靠传递。 本文介绍如何使用 HTTP Publish API。 你还将了解如何使用 Bruno 和 MQTTX 等常用工具获取必要的凭据并验证消息传递。
注释
此功能目前处于预览状态。
本文介绍如何通过事件网格通过 HTTP 来发布 MQTT 消息。
获取连接详细信息
-
命名空间完全限定的域名 (FQDN):例如
contoso.westus3-1.ts.eventgrid.azure.net。 -
主题:例如
devices/CXa-23112/prompt。 - 凭据:Microsoft Entra ID 客户端凭据。
角色分配
用于发出 HTTP 发布请求的标识必须具有用于 MQTT 消息发布者访问权限的 Azure RBAC 角色 EventGrid TopicSpaces Publisher 。
获取持有者令牌
运行以下 Azure CLI 命令以获取持有者令牌:
az account get-access-token --resource=https://eventgrid.azure.net --query accessToken -o tsv
保存此令牌以在标头中使用 Authorization: Bearer <TOKEN> 。
使用 HTTP 发布消息
下面是用于模拟 HTTP Publish 的示例 curl 命令:
curl -X POST "https://contoso.westus3-1.ts.eventgrid.azure.net/mqtt/messages?topic=devices%2XXXX-0000%2Fprompt&api-version=2025-08-01-preview" \
-H "Authorization: Bearer <ENTRA_TOKEN_HERE>" \
-H "mqtt-qos: 1" \
-H "mqtt-retain: 0" \
-H "mqtt-response-topic: devices%2XXXX-00000%2Freply" \
-H "mqtt-correlation-data: XXXXXXX" \
-H "mqtt-user-properties: XXXXXXXXXXXX" \
-H "Content-Type: text/plain;charset=UTF-8" \
--data-raw "Please accept terms of licensing and agreement"
在此示例命令中:
- 主题经百分比编码。
- 为服务质量 (QoS)、
RETAIN标志、响应主题和用户属性添加了可选标头。 - 负载放在请求正文中。
在 MQTTX 中进行验证
使用 MQTTX 或任何 MQTT 库(如 paho-mqtt Python)订阅同一主题以确认传递。
在 MQTTX 中创建新的连接:
Host: contoso.westus3-1.ts.eventgrid.azure.netPort: 8883 (TLS)Client ID: same as your Entra Object IDUsername/Password: N/A — use certificate or token auth if configured
订阅在 HTTP
POST命令中使用的主题。运行 HTTP Publish 并监视 MQTTX 中的消息。 系统应显示你的有效负载。
如果发布成功,则会看到:
- HTTP 响应:“204 无内容”或“202 已接受”(具体取决于路由规则)。
- 显示消息:MQTT 客户端立即看到该消息。
故障排除
- 401 未授权:如果令牌丢失或已过期,你会看到“401 未授权”。此时请刷新令牌。
- 403 禁止访问:如果主题无效或您没有权限,你会看到“403 禁止访问”。此时请检查主题或权限。
- 500 内部服务器错误:如果路由在内部失败,请检查事件网格命名空间的指标和诊断日志。
- 消息未显示:如果消息未显示,请确保主题在 URL 中经过百分比编码。 检查代理路由配置,并验证是否使用了相同的命名空间。
相关内容
- 有关此功能的概述,请参阅 AZURE 事件网格中 MQTT 消息的 HTTP 发布。