MQTT 客户端与 Web PubSub 客户端之间的跨协议通信

有时,你希望在一个中心内将 Azure Web PubSub 的协议结合使用 MQTT 客户端和其他客户端,从而实现跨协议通信。 本文档定义此类通信的工作原理。

概念

首先,让我们在跨协议通信的上下文中阐明概念。

  • MQTT 客户端:使用 MQTT 协议的客户端。
  • Web PubSub 客户端:使用 Web PubSub 自己的协议和 pub/sub 功能的客户端。 示例包括 json.webpubsub.azure.v1protobuf.webpubsub.azure.v1json.reliable.webpubsub.azure.v1protobuf.reliable.webpubsub.azure.v1。 可 在此处找到 Web PubSub 客户端协议的概述。
  • Reliable Web PubSub 客户端:使用 Web PubSub 可靠协议的 Web PubSub 客户端的子集,具体而言 json.reliable.webpubsub.azure.v1,以及 protobuf.reliable.webpubsub.azure.v1

概念映射

消息路由行为

概述:Azure Web PubSub 服务中的 MQTT 中,我们了解到加入 Web PubSub 协议中的组的工作方式与订阅 MQTT 中的同一命名主题相同。 同样,发送到组意味着发布到同一命名主题。 这意味着,如果使用 Web PubSub 协议的客户端加入组 a,它将从发送到主题 a的 MQTT 客户端获取消息,反之亦然。

消息内容类型转换

在 Web PubSub 协议中,有四种消息数据类型:文本、二进制、JSON 和 Protobuf。

在 MQTT 协议中,没有字段指示 MQTT 3.1.1 中的消息内容类型,但 MQTT 5.0 中有一个字符串“内容类型”字段。

下面是 MQTT“内容类型”字段与 Web PubSub 消息数据类型之间的转换:

MQTT“内容类型” Web PubSub“消息数据类型”
application/json JSON
text/plain 文本
application/x-protobuf Protobuf
application/octet-stream Binary
缺席或 MQTT 3.1.1 Binary

消息内容转换

对于基于文本的 Web PubSub 消息数据类型,包括 textjson,它们通过 UTF-8 编码转换到 MQTT 并从 MQTT 转换。 对于基于二进制的 Web PubSub 消息数据类型,包括 protobufbinary,它们在 MQTT 消息内容中保持不变。

消息服务质量(QoS)转换

在 Web PubSub 协议中,客户端接收的消息的 QoS 由客户端的协议决定。 可靠客户端仅获取 QoS 1 消息,而其他客户端仅获取 QoS 0 消息。

在 MQTT 协议中,客户端接收的消息的 QoS 由消息 QoS(发送 QoS)和已授予的订阅 QoS(特别是两者的较小值)决定。

当消息跨协议传输时,收到的 QoS 的定义如下:

邮件发件人 消息接收器 QoS 评估
MQTT 客户端 Reliable Web PubSub 客户端 QoS 始终为 1
MQTT 客户端 其他 Web PubSub 客户端 QoS 始终为 0
Web PubSub 客户端 MQTT 客户端 Min(1,已授予订阅 QoS)

其他

此处列出的消息属性跨协议生效。 其他人没有。

  • MQTT 消息到期间隔