MQTT 多主题与更大的有效负载

物联网 MQTT 发布订阅者
2021-06-18 03:25:08

我想知道 mqtt 消息的主题命名和有效负载设计的最佳实践。

使用多个长主题名称和更大的有效负载或具有更大有效负载的短主题名称是否更好。

例如:

plant1/machineA/sensorX/temperature/value 20
plant1/machineA/sensorX/temperature/unit C
plant1/machineA/sensorX/temperature/timestamp 2018-08-01T12:00:30.123Z

对比

plant1/machineA/
{
  ["sensorX": {
   "value": 20,
   "unit": "C",
   "timestamp": "2018-08-01T12:00:30.123Z"
  }]
}

还有很多可能性。但是有通用的方法吗?在主题名称或负载中尽可能多?

2个回答

您的设计问题是 MQTT 传输之上的协议。现有的协议可以指导您的选择:

高可扩展性应用程序的主题端点的选择似乎是每个事物的一小部分主题(有道理:如果您有数百万个事物,您希望最小化代理的切换负担),至少一个“事件”主题(遥测从事物发布到应用程序)和一个“控制”主题(事物从应用程序接收命令)。

此外,有效载荷中的信息通常由密钥(例如时间戳或序列号)和属性值组成。在您的第一选择中,面对网络上不同步的消息流,您如何将在不同主题上收到的不同值联系在一起?

应该根据您如何使用主题来做出决定。如果您需要一起使用值 - 将它们发布到一个主题中,如果您单独使用 - 将它们放入单独的主题中。也不要在主题中发布值,例如在您的第一个示例中。并且不要创建超出主题的主题,例如用于温度传感器的 sensorX/温度,从一开始更一般到最后更具体。所以我建议你发帖到:

plant1/machineA/sensorX
{
   "value": 20,
   "unit": "C",
   "timestamp": "2018-08-01T12:00:30.123Z"
}

或者如果您有各种类型的传感器并想在它们之间进行选择,请将温度放在传感器名称之前:

plant1/machineA/temperature/sensorX

或者也可能的情况是:

temperature/plant1/machineA/sensorX