已建立连接,但无法在 paho mqtt 客户端上检索消息负载

Connection is established, but unable to retrieve message payload on paho mqtt client

我的客户端无法从 MQTT 服务器接收消息负载。我在我的电脑上设置了 mosquitto 作为服务器和发布者并执行以下命令:

mosquitto_pub -h 192.168.1.2 -t topic/test -m "testing" -i simulator -d

我自己订阅成功并收到负载。

但是,我使用 paho mqtt 的客户端只收到成功的连接而没有有效负载消息。所以我这里有以下代码:

def on_connect(client, userdata, flags, rc):
    print("connection ok")
    client.subscribe("topic/test")

def on_message(client, userdata, msg):
    print("Message received! " + str(msg.payload))
    
    if msg.payload == "testing":
        print("Message received")
        # Do something
        ...

def main():
    #MQTT 
    broker = "192.168.1.2"  #broker ip
    client = mqtt.Client("simulator") 
    client.on_connect = on_connect
    client.on_message = on_message

    client.connect(broker, 1883, 60)
    client.loop_start() 

    while(1):
        ...

所以它确实打印了“连接正常”,但没有打印“消息已收到!...”

您在 mosquitto_pub 和 python 中使用相同的 client-id (simulator)。根据 the spec:

If the ClientId represents a Client already connected to the Server then the Server MUST disconnect the existing Client

所以发生的事情是:

  • Python 客户端连接并订阅。
  • mosquitto_pub 连接,代理断开连接 python 客户端。
  • mosquitto_pub 发布消息(但由于没有订阅,QOS 0 消息将被代理丢弃)。
  • Python 客户端重新连接并再次订阅。

尝试使用不同的 client-id 和 mosquitto_pub(当我以这种方式测试时,您的代码工作正常 - 在 while(1) 中添加了一个 time.sleep(1))。