Получение сообщений без подписки в библиотеке python Paho MQTT

#python #mqtt #paho

#python #mqtt #paho

Вопрос:

Я работаю над проектом, в котором мне нужны два компьютера для связи через MQTT. Чтобы протестировать это, я создал этот код. Я запустил этот код на своем ноутбуке:

 import paho.mqtt.client as mqtt
import time
def on_connect(client,userdata,flags,rc):
    if rc == 0:
        print("connected OK")
    else:
        print("bad connection Returned code=",rc)
    client.subscribe('test/message')
def on_subscribe():
    print('hello')
def on_message(client,userdata,msg):
    message=str(msg.payload.decode())
    print(message)
broker = "10.49.12.253"
client = mqtt.Client("Get")
client.on_subscribe = on_subscribe
client.on_connect = on_connect
client.on_message = on_message
print("Connecting to broker ",broker)
client.connect(broker)
client.loop_forever()
  

После публикации сообщения с другого компьютера я получил этот вывод:

 Connecting to broker  10.49.12.253
connected OK
Hello, world
  

Компьютер, с которого я отправил сообщение, также является брокером. Я в замешательстве, потому что on_subscribe функция никогда не вызывается, и я не понимаю, почему, поскольку я все еще получаю сообщения. Что здесь происходит?

Ответ №1:

Проблема в том, что в вашей on_subscribe() функции отсутствует требуемое количество аргументов. Это должно быть:

 ...
def on_subscribe(client, userdata, mid, granted_qos):
  print("hello")
...
  

Paho запускает обратные вызовы в блоке try / except и проглатывает сообщение об ошибке, которое было бы вызвано неправильной подписью.

Документы:https://www.eclipse.org/paho/index.php?page=clients/python/docs/index.php#on-subscribe