我正在使用 Mosquitto 和 Paho 的 Python 实现来尝试交流几个程序。当我使用 last will 函数时,我遇到了一些麻烦。我的代码是这样的:

订户:

import paho.mqtt.client as mqtt
def on_message(client, userdata, msg):
    print 'Received: ' + msg.payload

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

client.connect('localhost', 1883)
client.subscribe('hello/#')

client.loop_forever()

出版商:
import paho.mqtt.client as mqtt

client = mqtt.Client()

client.will_set('hello/will', 'Last will', 0, False)
client.connect('localhost', 1883)

client.publish('hello/world', 'Regular msg', 0, False)
client.disconnect()

输出:
Received: Last will

我应该只收到常规消息,因为我使用 client.disconnect() 关闭连接。如果我评论 will_set 行,我会收到常规消息。我也尝试在同一主题上发布两者,但它不起作用。

最佳答案

您可以尝试使用单一方法仅发布一条消息,如下所示:

import paho.mqtt.publish as publish

publish.single('hello/world', 'Regular msg', 0, False, 'localhost' , 1883, 'publisher', 10, {'topic': 'hello/will', 'payload': 'Will msg', 'qos': 0, 'retain': False})

https://pypi.python.org/pypi/paho-mqtt#single

我猜问题是您在发布实际完成之前断开连接,这可能是您看到遗嘱消息的原因。

编辑 -
当我用 mosquitto_sub -v -t 'hello/#' 运行你的代码时,我看到了正常的消息和将被传递的消息。

编辑2 -

这对我来说很好用:
import paho.mqtt.client as mqtt

client = mqtt.Client()

client.will_set('hello/will', 'Last will', 0, False)
client.connect('localhost', 1883)

client.publish('hello/world', 'Regular msg', 0, False)
client.loop();
client.disconnect()
client.loop();

10-08 14:25