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

问题描述:

我正在使用Mosquitto(现在的Paho)python MQTT客户端连接到HiveMQ代理。该代码是非常基本的,因为从这里开始他们的资料为准 - https://pypi.python.org/pypi/paho-mqtt无法使用Mosquitto/Paho for Python收到超过20条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() 

正如你在client.subscribe(通知),服务质量是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) 

这里也中,QoS是2

由订户所接收的QoS的结果中只有20的消息,该修改。进一步探测后,我意识到这个问题可能是由于max_inflight_messages_set(),这是一个选项功能,它设置了QoS> 0的消息的最大数量,可以一次性通过他们的网络流量的一部分。默认值为20.

但是,将其更改为任何其他值不起作用。另外,为什么客户在收到邮件时觉得这些邮件仍然在飞行中?我如何解决问题?我如何确保客户了解这些消息不是“飞行中”并已交付?

尝试在发行商mqttc.publish()之后拨打mqttc.loop(2,10),以便发布商可以处理来自已收到发布的代理的QOS2确认。

2秒超时和10个数据包可能比需要的多,但它应该工作

+0

'的max_packets说法已经过时,应保持unset.' https://pypi.python.org/pypi/paho- MQTT/1.3.0#网络环 – northtree 2017-07-12 07:06:56

@hardillb是正确的,你需要某种形式的loop*()通话。要更多一些,这样做:

import paho.mqtt.client as mqtt 

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

mqttc = mqtt.Client() # There's normally no need to set a client id. 
mqttc.on_publish = on_publish 
mqttc.connect("192.168.15.4", 1883, 60) 
mqttc.publish("GB/node0/", "Hello, World baby!",2) 
mqttc.loop_forever() 

或者:

import paho.mqtt.publish as paho 
paho.single("GB/node0/", "Hello, World baby!", qos=2, hostname="192.168.15.4")