我对mqtt设计很新。
正如我在互联网上的一些教程中看到的,常见的mqtt主题具有以下格式:/ home / room / device_type / device_id
我无法看到这样做的好处。并且不知道如何使用这种设计。
从我的角度来看,设备(dev)可能订阅(sub)来控制主题并发布(pub)到status主题。像这样:
通过这种方式,它似乎是sub,pub逻辑对于客户端和设备都非常简单
有人可以告诉我一些设计mqtt主题的好方法吗?
(!)请不要以'/'开头话题(这个是HiveMQ团队推荐的)
编辑:
我只是想到,对于任何类型的设计,模型必须至少可以服务:
非常感谢
答案 0 :(得分:2)
我发现以下主题拆分方案在多个应用程序中运行良好
protocol_prefix / src_id / dest_id / message_id / extra_properties
希望它有所帮助。
答案 1 :(得分:2)
我认为,如果要反映现实世界的话题,我们应该看一下信号K。
编辑: 该规范也仍在完善中,但它包括服务器/经纪人的“自我”之类的概念,以及一棵可以从当前船只/房屋开始但可以轻松向上延伸到其他船只/飞机/事物的树。
我的两分钱
这是一棵建议的树:
答案 2 :(得分:0)
我们已经在制造业领域(工业物联网,而不是物联网!)上做了一些工作。
在我们的场景中,有许多不同公司的服务器端应用程序通过MQTT进行通信。因此,我们需要一些整体结构。我们称其为“制造消息栈”。
最底层是MQTT,然后是“消息传递层”。它主要由
组成在消息传递层之上,是域消息传递层,其中覆盖了各种特定于域的主题,例如系统消息,警报,物理设备/数字孪生消息或其他与制造相关的消息。
主题
主题大致定义为<senderapp>/<app-id>/<message-name>/<args>
,例如pacman/pacman-1/gameover
(这是一个示例,仅供说明!)
发布MQTT消息的应用程序的开发人员根据有效内容的语义定义<message-name>
和<args>
。
<senderapp>
和<app-id>
指发送应用程序,并允许从定义的来源(发布者)中快速选择消息。我们将应用程序部署在使用Docker,Rancher-以及之后的Kubernetes构建的微服务环境中。
有效载荷
有效负载以JSON格式指定。每个中都有一个JSON模式参考URL 构建指向发布应用的API的URL,该URL包含已发送消息的更多信息(例如JSON模式)。因此,订户可以按需获取MQTT消息的元数据。静态元数据不与消息一起发送以减小有效负载大小。
有效负载示例:
{
"$schema": "http://app/api/messages/message1.json",
"score": 1234,
"highscore": false
}
发布者的消息元数据
发布应用可保存可通过API发送的所有消息的索引,网址为
http://<app>/api/messages/index.json
:
{
"message1": "message1.json",
...
}
每条消息均以其JSON模式message1.json
描述:
{
"$schema": "http://json-schema.org/draft-06/schema#",
"title": "Pacman end of game",
"properties": {
"score": {
"description": "Players score at the end of game",
"type": "integer"
},
...
}
}
很遗憾,我们尚未发布制造消息堆栈。计划在未来几个月内发布。欢迎提供反馈。