我如何区分源自用户的MQTT发布事件和仅用于广播的内部消息

我如何区分源自用户的MQTT发布事件和仅用于广播的内部消息,mqtt,mosquitto,Mqtt,Mosquitto,我正在使用MOSQUITO mqtt客户端 例如,您有发布和订阅主题的用户。该主题实际上与REsT端点相关 场景1(典型的酒吧/酒吧用法) UserA订阅topic/device/123/meta UserB将一些数据发布到topic/device/123/meta 根据定义,此发布将广播给订阅者 我们订阅了一个/devices/#脚本,它知道如何在收到发布数据时保存主题/device/123/meta的有效负载。此数据将保存到数据库中 场景2 有人通过ReST接口(或直接DB更新,关键是它

我正在使用MOSQUITO mqtt客户端

例如,您有发布和订阅主题的用户。该主题实际上与REsT端点相关

场景1(典型的酒吧/酒吧用法)

  • UserA订阅topic/device/123/meta
  • UserB将一些数据发布到topic/device/123/meta
    • 根据定义,此发布将广播给订阅者
    • 我们订阅了一个/devices/#脚本,它知道如何在收到发布数据时保存主题/device/123/meta的有效负载。此数据将保存到数据库中
  • 场景2

  • 有人通过ReST接口(或直接DB更新,关键是它不是MQTT发布)更新数据/设备/123/元数据。
    • 数据库已更新
    • 将发布消息发送到MQTT代理,以便所有订阅者都将更新作为有效负载
  • 场景2是我想要思考的问题。这造成了一个令人讨厌的反馈循环。当内部消息被广播出去时,我处理来自用户的发布事件的脚本无法区分来自第三方用户的发布事件或仅用于广播某些数据(不需要保存数据)的内部发布事件


    我该怎么处理?MQTT消息非常简单,我找不到任何逻辑基础。我正试图以某种方式使用原点进行探索,但目前为止运气不佳。我意识到我可以写插件,但这是莫斯奎托的任务

    在纯MQTT协议级别无法区分来自订阅者的消息的来源。发布/订阅协议的一部分要点是将发布者与订阅者分离

    实现这一点的最便捷的方法是向实际消息负载添加一个标志,以指示消息来自实际设备以外的其他地方

    或者假设消息是作为数据库中的触发器的结果发布的,如果传入消息实际更改了数据库存储值,则进行触发器检查,如果传入消息与数据库的现有状态匹配,则无需重新发布它


    Mosquitto的插件机制目前仅用于编写身份验证和授权解决方案,但JavaScript或Java代理支持可以做您想做的事情的插件。

    无法在纯MQTT协议级别区分来自订阅者的消息来源。发布/订阅协议的一部分要点是将发布者与订阅者分离

    实现这一点的最便捷的方法是向实际消息负载添加一个标志,以指示消息来自实际设备以外的其他地方

    或者假设消息是作为数据库中的触发器的结果发布的,如果传入消息实际更改了数据库存储值,则进行触发器检查,如果传入消息与数据库的现有状态匹配,则无需重新发布它

    Mosquitto的插件机制目前仅用于编写身份验证和授权解决方案,但JavaScript或Java代理支持可以做您想做的事情的插件