使用Mosquitto / Paho for Python无法接收超过20条MQTT消息

sbh*_*tla 5 python mqtt mosquitto paho

我正在使用Mosquitto(现在为Paho)的python MQTT客户端连接到HiveMQ代理。该代码非常基础,取自其文档-https: //pypi.python.org/pypi/paho-mqtt

#SUBSCRIBER
import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
    client.subscribe("GB/node0/", 2) 

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print "Topic: ", msg.topic+'\nMessage: '+str(msg.payload)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("192.168.15.4", 1883, 60)

# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
client.loop_forever()
Run Code Online (Sandbox Code Playgroud)

如您在client.subscribe()中所注意到的,QoS为2。这是对官方文档代码的唯一修改。

发布客户的代码是-

#PUBLISHER
import paho.mqtt.client as mqtt    
mqttc = mqtt.Client("python_pub")
mqttc.connect("192.168.15.4", 1883, 60)   
mqttc.publish("GB/node0/", "Hello, World baby!",2) 
Run Code Online (Sandbox Code Playgroud)

此处的QoS也为2。

QoS的这种修改导致订户仅接收20条消息。经过进一步的探查,我意识到问题可能是由于引起的max_inflight_messages_set(),这是一个选项功能,它设置了QoS> 0的最大消息数,该消息可以一次通过它们的网络流。默认值为20。

但是,将其更改为任何其他值均无效。另外,为什么客户在收到这些消息后仍认为这些消息仍在运行中?我该如何解决该问题?我如何确保客户了解这些消息不是“机上”并且已经传递?

har*_*llb 4

mqttc.loop(2,10)尝试在发布者之后调用mqttc.publish(),以便发布者可以处理来自代理的 QOS2 确认,表明它已收到发布。

2 秒超时和 10 个数据包可能超出了需要,但它应该可以工作