我对mqtt设计非常陌生。
从互联网上的一些教程中可以看到,常见的mqtt主题具有以下格式:/ home / room / device_type / device_id
我看不到这样做的好处。而且不知道如何使用这种设计。
从我的角度来看,设备(dev)可能会订阅(sub)来控制主题,而会发布(pub)到状态主题。像这样:
这样,看来客户端和设备的sub,pub逻辑非常简单
可能有人请告诉我设计MQTT主题的一些好办法吗?
(!),请不要开始话题“/”(此人被推荐HiveMQ队)
编辑:
我想通了,不管是什么样的设计,模型必须服务,能够至少包括:
非常感谢你
我发现以下主题拆分方案在多个应用程序中效果很好
protocol_prefix / src_id / dest_id / message_id / extra_properties
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
我们在制造领域(工业物联网,不是物联网!)做了一些工作。
在我们的场景中,有许多不同公司的服务器端应用程序通过 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,该应用程序保存所发送消息的更多信息(例如 JSON 模式)。这样订阅者就可以按需获取MQTT消息的元数据。静态元数据不与消息一起发送以减少有效负载大小。
有效负载样本:
{
"$schema": "http://app/api/messages/message1.json",
"score": 1234,
"highscore": false
}
Run Code Online (Sandbox Code Playgroud)
发布者的消息元数据
发布应用程序保存可以在 API 中发送的所有消息的索引
http://<app>/api/messages/index.json:
{
"message1": "message1.json",
...
}
Run Code Online (Sandbox Code Playgroud)
每条消息均由其 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"
},
...
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们还没有发布我们的制造消息堆栈。计划在未来几个月内出版。欢迎反馈。
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |