使用“.”是安全的。有 MQTT 主题级别分隔符而不是“/”?

It is safe to use "." has MQTT topic level separator instead of "/"?

有几个设备使用 MQTT 协议连接到 RabbitMQ,并且有许多 nodejs 进程使用 AMPQ 协议订阅 RabbitMQ 以获取数据来自这些设备。

设备发布的主题结构如下:data.DEVICETYPE.IDDEVICE,例如,一个 nodejs 进程订阅了主题 data。# 用于从设备获取所有消息。

我担心的是分隔符,在这种情况下,分隔符是“.”;因为在 MQTT 协议的所有示例和文档中,他们总是使用“/”(如路径文件夹)所以我开始认为使用点而不是斜线可能是个问题。

值得一提的是,这个系统确实运行良好,但我真的不知道将来这个决定是否会出现兼容性问题。

编辑:实际上我的结构是这样的:RabbitMQ Topic structure 我从这里开始创建那个主题结构。

/是MQTT中的层级分隔符。如果您改用 .,它会 "works",但您只有大量不同的顶级主题。

您无法通过 data.# 使用通配符进行订阅 - 这是一个无效的订阅主题。 # 必须是订阅的最后一个字符,并且必须在其自己的级别上。由于 . 不是层次结构分隔符,您违反了最后一条规则。