Hierarchy 用于发布3个数据点的MQTT主题的层次结构

Hierarchy 用于发布3个数据点的MQTT主题的层次结构,hierarchy,mqtt,publish-subscribe,data-integrity,Hierarchy,Mqtt,Publish Subscribe,Data Integrity,这是一个关于MQTT主题的复合问题 我有几个MQTT客户机(传感器节点),它们将感测数据发布为“_Data”,将信号强度发布为“_rssi”,将数据收集时间发布为“_toc” /节点/节点id/数据/ /节点/节点id/rssi/ /节点/节点id/toc/ 其中,“node_id”是客户端(节点)的标识符(整数/数字)(对于节点是唯一的)。相应的有效载荷是\u data(浮点数据)、\u rssi(浮点)和\u toc(Unix日期时间)。显然,这三个数据点都是相互关联的 这种设计有助于根据授

这是一个关于MQTT主题的复合问题

我有几个MQTT客户机(传感器节点),它们将感测数据发布为“_Data”,将信号强度发布为“_rssi”,将数据收集时间发布为“_toc”

/节点/节点id/数据/
/节点/节点id/rssi/
/节点/节点id/toc/

其中,“node_id”是客户端(节点)的标识符(整数/数字)(对于节点是唯一的)。相应的有效载荷是\u data(浮点数据)、\u rssi(浮点)和\u toc(Unix日期时间)。显然,这三个数据点都是相互关联的

这种设计有助于根据授权订阅的主题维护对不同订阅者的访问控制

然而,对于每个节点/客户机使用3个不同的主题,有一点非常重要——如果MQTT客户机和服务器之间的连接在发布“数据”有效负载之后以及在发布“rssi”和“时间戳”有效负载之前断开(丢失),那么三个数据点(来自“数据”的消息)之间是不匹配的主题将反映新的价值观,而其他两个主题将保留旧的价值观-诚信缺失

我可以用一行的主题,比如

/node/node\u id/data/\u data/rssi/\u rssi/toc/\u toc

/节点/节点id/(数据、rssi、toc)

并将、_data、_rssi和_toc替换为相应的值,对其进行解析并分离这些值。特别是最后一个主题样式,它减少了客户端发布的次数,从而节省了数据成本和完整性错误。它的长度也很短。但是,当然,这是一个混乱的、非常临时性的问题,错误很容易出现


是否有人可以建议一种中间方法,以始终保持数据完整性,最大限度地减少客户端应该进行的发布次数,并保持干净的消息结构。我当然更希望有数据完整性,但也希望在订阅者之间隔离访问权限

不要将数据编码到主题中,它最终会变得非常混乱,这意味着您必须使用非常讨厌的通配符订阅才能使事情正常进行


如果数据确实需要紧密地联系在一起,那么唯一的选择就是发布一条包含有效负载中所有3个值的消息。这确实意味着您不能单独访问各个组件,但这是唯一的方法。

先生,您显然已经看到了一些东西。我甚至没有想到OP正在对主题中的数据进行编码……当然,我不会将数据放入主题中。我们将使用@gambit提供的解决方案,将所有数据作为有效负载放在一个主题中,然后进一步解析它。谢谢你的回复。你是说在这组度量中(你给出了上面的3个:_data、_rssi和_toc),某些订阅者只允许查看子集(例如_data和_tocvs._rssi和_tocvs.所有三个)?似乎您不希望您的传感器节点负责您的访问控制。从设计的角度来看,只允许一个订户完全访问原始测量值,然后根据访问权限对数据进行分区并重新发布子集。@GambitSupport是的,非常支持;实际的网络架构有点复杂,有许多组件在起作用。重新发布看起来是一个很好的解决方案;它解决了所有3个体系结构问题—完整性、访问控制和低数据传输成本。令人惊讶的简单解决方案,我没有想到。谢谢