你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 事件网格的 MQTT 中转站功能问题的故障排除指南
本指南提供有关在提交支持票证之前如何排查问题的信息。
无法将 MQTT 客户端连接到事件网格命名空间
如果客户端无法连接到事件网格命名空间,你需要验证以下几点:
- 是否使用服务创建了客户端元数据?
- 在客户端可以连接之前,应该有服务的客户端标识条目。 查看快速入门指南,使用事件网格命名空间发布和订阅 MQTT 消息。
- 在客户端元数据中验证客户端连接状态是否为已启用。
- 是否正确配置了身份验证凭据?
- 必须满足以下两个条件之一
- 客户端连接数据包中的 Username 字段与客户端元数据中的客户端身份验证名称匹配。
- 或者,五个受支持的证书字段之一包含客户端身份验证名称。 由于用户名字段中未提供客户端身份验证名称,因此必须在命名空间“配置”页上的“设置”下选择替代源。 详细了解客户端身份验证配置。
- 如果使用基于 CA 证书链的身份验证,请确保客户端证书已由上传到服务的 CA 证书之一签名。 详细了解基于证书链的客户端身份验证。
- 如果使用自签名 X.509 证书指纹对客户端进行身份验证,请检查客户端元数据中的指纹是否与在连接数据包中使用的证书中的指纹匹配。
- 必须满足以下两个条件之一
- 确保已在防火墙中打开端口 8883。
- 确保客户端 ID 在命名空间中的所有客户端上是唯一的。 如果对新客户端连接使用相同的客户端 ID,将会替换现有的客户端连接。
- 检查可以连接到命名空间的客户端数量限制。
MQTT 客户端断开连接
如果客户端从事件网格命名空间断开连接,你需要验证以下几点:
- 确保该命名空间在区域中可用。
- 确保客户端元数据仍然完好无损,其中包含客户端身份验证名称
- 确保客户端发布到的主题实际存在。
- 如果客户端在发布时断开连接,请确保客户端有权发布到主题。 客户端需是对该主题拥有发布权限的客户端组的一部分。 详细了解访问控制
- 确保客户端 ID 在命名空间中的所有客户端上是唯一的。 如果使用同一客户端 ID 连接新客户端,则已使用该客户端 ID 的客户端会断开连接。 详细了解如何为每个客户端建立多个会话。
- 确保保持连接时间经过优化,适合客户端的消息活动模式。 详细了解保持连接时间支持。
- 使用 MQTT V5 时,请检查断开连接数据包来了解客户端断开连接的原因。 在大多数情况下,服务器会将断开连接原因传达给客户端,以帮助客户端更好地处理断开连接。
- 考虑配置客户端生命周期事件以查看断开连接原因。 若要详细了解生命周期事件,请参阅 MQTT 客户端生命周期事件。
- 检查可以连接到命名空间的客户端数量限制。
客户端无法发布或接收 MQTT 消息
如果客户端已连接但不接收任何 MQTT 消息,请验证以下几点:
- 如果使用的是自定义客户端组(而不是 $all),请确保客户端属于正确的客户端组。 详细了解客户端组。
- 确保为客户端组配置了对主题空间的发布或订阅权限。 详细了解权限绑定。
- 如果使用 MQTT V5,则支持否定确认。 服务器还会通知发布客户端,如果服务器当前无法处理消息,则它还会告知原因。
- 此外,请确保客户端订阅的主题包含在客户端对其拥有订阅访问权限的主题空间中。 详细了解如何配置主题空间
- 确保消息过期间隔已针对客户端的连接模式进行优化。
- 如果配置了最大消息大小属性,请确保发布的消息符合订阅客户端的大小要求。 详细了解消息大小限制
- 如果使用响应主题,请确保在请求主题上发布之前客户端订阅响应主题。
- 使用 QoS 1 设置让服务保证传递消息至少一次。 另外,确保客户端在收到消息时发送确认。 如果未收到确认,服务将在有 16 条消息未确认后停止向客户端发送消息。
- 检查发布消息的限制。
无法将 MQTT 消息路由到终结点
如果无法在配置的路由终结点上接收 MQTT 消息,请验证以下几点:
后续步骤
了解 MQTT 监视指标