You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:25:23