Paho MQTT客户端:如何忽略自己发布的消息?

Paho MQTT client: how to ignore messages published by myself?

我的 Paho MQTT 客户端执行以下操作:

  1. 订阅mytopic/#
  2. 某事
  3. 发布到mytopic/#

问题:
第 3 步中发布的消息到达第 1 步。我想避免向有效负载添加 sender 属性。

是否有忽略自行发布消息的正确方法?类似于以下内容(伪代码):

def on_message(self, client, userdata, message):
    if client.id == message.sender_client_id:  # Is there anything like the sender_client_id?
        return

有什么想法吗?谢谢!

这个逻辑应该有效:

  1. 为每个客户分配一个id
  2. 每个客户都在 mytopic/{id} 上发布
  3. 每个客户都订阅 mytopic/#

忽略 message.topic 以 mytopic/{id}

开头的消息

从 MQTT v5 spec 开始,您可以告诉代理不要将您自己的消息作为订阅消息的一部分发回给您。

这样就无需添加标识符,因此您可以选择忽略它。

这当然依赖于支持 MQTT v5 的代理和 MQTT 客户端

def on_message(self, client, userdata, message):
    if client.id == message.sender_client_id:  # Is there anything like the sender_client_id?
        return

在您的伪代码中,您要求提供客户端的身份,但这与 MQTT 规范完全相反。在 MQTT 中,两个不同的客户端不知道彼此的身份,他们仅通过订阅主题通过 MQTT 代理进行通信。