Paho Python Client 1.6.1设置MQTTv5 ResponseTopic后C++端props为空
问题:Python Paho MQTTv5客户端发送的ResponseTopic属性无法被C++端获取
我使用Mosquitto Broker搭配vcpkg MQTT C客户端,C端可正常接收带MQTTv5回复主题属性的消息。但使用Paho Python Client(1.6.1版本)按指引设置ResponseTopic后,C++端接收消息时props属性为空,无法获取回复主题。
Python端原代码
from paho.mqtt.properties import Properties from paho.mqtt.packettypes import PacketTypes from paho.mqtt.client import Client properties=Properties(PacketTypes.PUBLISH) properties.ResponseTopic="myreplies" client = Client(client_id = "client_1",protocol=5) client.connect("localhost",properties=properties) publisher.publish(topic = "acquisition/FifoServerParams", payload = "message")
C++端处理代码
client->set_v5_publish_handler( [&](mqtt::optional<async_client_t::packet_id_t>, mqtt::publish_options, mqtt::buffer topicName, mqtt::buffer contents, mqtt::v5::properties props)
问题原因及修正方案
你的代码存在两个关键问题:
- 属性传递位置错误:你把用于发布消息的
Properties传给了connect方法,但connect的properties参数是用于MQTTv5连接报文的属性(如会话过期时间等),和发布消息的属性完全无关。发布消息的属性必须传给publish方法。 - 变量名笔误:代码中使用了未定义的
publisher变量,应该用之前创建的client对象来调用publish方法。
修正后的Python代码:
from paho.mqtt.properties import Properties from paho.mqtt.packettypes import PacketTypes from paho.mqtt.client import Client # 创建发布专属的属性对象 pub_properties = Properties(PacketTypes.PUBLISH) pub_properties.ResponseTopic = "myreplies" client = Client(client_id="client_1", protocol=5) client.connect("localhost") # 发布消息时传入属性 client.publish(topic="acquisition/FifoServerParams", payload="message", properties=pub_properties)
这样修改后,C++端就能正常接收到包含ResponseTopic的MQTTv5属性了。
内容的提问来源于stack exchange,提问作者Stefano Piovesan
相关产品推荐
相关产品推荐

