最好使用多个主题名称和较长主题名称,并使用较大的有效负载或较短的主题名称和较大的负载。
例如:
plant1/machineA/sensorX/temperature/value 20
plant1/machineA/sensorX/temperature/unit C
plant1/machineA/sensorX/temperature/timestamp 2018-08-01T12:00:30.123Z
vs.
plant1/machineA/
{
["sensorX": {
"value": 20,
"unit": "C",
"timestamp": "2018-08-01T12:00:30.123Z"
}]
}
有一个还有更多的可能性。但是有没有通用的方法?尽可能在主题名称或有效载荷中使用?
#1 楼
您的设计问题是MQTT传输协议之上的协议。现有的协议可以指导您的选择:
Cirrus Link Sparkplug https://www.Cirrus Link Sparkplug。 cirrus-link.com/oem-device-data-integration/
任何其他云IoT平台API(AWS,Azure,Google,IBM等)
对于高可伸缩性应用程序,主题端点的选择似乎只是每件事主题集很小(很有意义:如果您有数百万个事物,则希望最大程度地减少代理的切换负担),至少要有一个“事件”主题(从事物到应用程序发布遥测)和一个“控制”主题(事物由应用程序从应用程序接收命令)。
此外,有效负载中的信息通常由一个密钥组成(例如,时间戳或序列号)和属性值。在您的第一选择中,如何面对网络上不同步的消息流,如何将在不同主题上获得的不同值结合在一起?
评论
感谢您指向卷云。那很有趣。您还知道其他类似的“协议”吗? BR
– CPA
18年8月17日在11:31
e-s-r.net/download/specification/ESR030-LWM2M-MQTT-1.0-A.pdf
–Gambit支持
18年8月17日在14:26
#2 楼
应该根据您如何使用主题来做出决定。如果需要在一起使用值,则将它们发布到一个主题中;如果单独使用,则将它们放在单独的主题中。也不要像在第一个示例中那样在主题中发布值。并且不要创建超出主题的范围,例如温度传感器的sensorX /温度,从一开始就更通用,到最后更具体。所以我建议您发布到:
plant1/machineA/sensorX
{
"value": 20,
"unit": "C",
"timestamp": "2018-08-01T12:00:30.123Z"
}
,或者如果您有各种类型的传感器,并且要在它们之间进行选择,请将温度放在传感器名称之前的某个位置:
plant1/machineA/temperature/sensorX
,或者也可以案例是:
temperature/plant1/machineA/sensorX
评论
这完全取决于您的用例。