问题描述
我在使用 pika like 向我的 rabbitmq 代理发布消息时添加了一个标头键:值对
channel.basic_publish(exchange=self.exchange,routing_key=self.routing_key,properties=pika.BasicProperties(
headers={'key': 'value'}
),body=message)
在我的客户端,我使用 websockets 订阅 Paho MQTT 的主题。如何使用 Paho MQTT 检索相同的消息标头。我尝试了以下对我不起作用的方法
def onMessage(client,userdata,message):
print("topic: " + message.topic + ",message: " + str(message.payload,'utf-8'))
print(client.headers)
print(userdata.headers)
print(message.headers)
更新
我发现该消息具有“属性”属性。但是当我尝试 print(message.properties)
时,它给了 AttributeError: properties
解决方法
Pika 是一个 AMQP 客户端,以 AMQP 格式发布消息。
Paho 是一个 MQTT 客户端,因此只能处理该格式的消息。在 MQTT v3(Paho Python 客户端尚不支持 MQTT v5)中,该协议没有任何范围来保存消息属性。 MQTT v3 消息的唯一属性是 topic
、payload
、QOS
和 retained
位。
因此,在将消息从队列移动到 MQTT 主题之前,RabbitMQ 代理必须进行格式转换并剥离属性。
所以基本上我是说 MQTT 消息中没有要读取的属性。
编辑: 看起来最新版本的 Paho Python 客户端确实支持 MQTTv5(该文档尚未更新)。虽然 MQTTv5v 确实支持标头中的键/值对属性,但这将取决于使用 MQTTv5 和 RabbitMQ 实际连接的客户端是否支持 MQTTv5 并将值复制到新格式。