【问题标题】:Missing Subscribing messages publish by Qos=2缺少 Qos=2 发布的订阅消息
【发布时间】:2015-05-19 08:01:01
【问题描述】:

我正在为 Qos=2 订阅主题“OK/Topic”的消息,但有时我没有收到 Qos=2 发布的消息,遵循我的订阅代码:

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("OK/Topic",2)

def on_message(client, userdata, msg):
    print(" Topic : "+str(msg.topic)+"  and Message is : "+str(msg.payload))

def on_subscribe(client, userdata,mid, granted_qos):
    print "userdata : " +str(userdata)


strs="my-message-to-publish"
mqttc = mqtt.Client("Python-MQTT-Pub-Sub")
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.on_subscribe = on_subscribe
mqttc.connect("IP", PORT, 60)
mqttc.start_loop()
while True:
    mqttc.publish("New/Topic",str(strs))
    print "publish message " + str(strs)
    time.sleep(1)

我在主题“OK/Topic”上的发布者代码如下:

def on_publish(client, userdata, mid):
    client.disconnect()

mqttc = mqtt.Client()
mqttc.on_publish = on_publish
mqttc.publish("OK/Topic","my_message",2)

如果我发布 10 条消息,我将收到订阅者 7-8 消息,但不是 10 任何人都知道为什么我会丢失一些消息。

谢谢..!!!

【问题讨论】:

    标签: python mqtt


    【解决方案1】:

    在 on_publish 方法中调用 disconnect 很可能会在完整的 QOS2 进程干净地完成之前关闭连接。

    不要使用 publish 和 on_publish 断开连接,而是尝试使用单一方法在一个同步方法中完成完整的连接、发布、清理:

    import paho.mqtt.publish as publish
    
    publish.single(topic, payload=None, qos=0, retain=False, hostname="localhost", port=1883, client_id="", keepalive=60, will=None, auth=None, tls=None,protocol=mqtt.MQTTv311) 
    

    【讨论】:

    • 谢谢hardlib..!!我通过更改协议版本“protocol=mqtt.MQTTv31”尝试使用上述单一方法,因为我的 mosquitto 是 MQTT v3.1 代理,但同样我缺少一些发布消息。任何线索..
    • 在客户端 mosquitto_sub -t 'OK/Topic' 我看到所有发布消息都在代理端收集,但订阅者没有订阅所有消息...
    猜你喜欢
    • 2016-04-18
    • 2022-07-12
    • 1970-01-01
    • 2017-03-28
    • 2023-04-06
    • 1970-01-01
    • 2016-07-03
    • 2016-11-25
    • 2021-02-27
    相关资源
    最近更新 更多