【问题标题】:How to read header key:value pair when subscribing a message with Paho MQTT使用 Paho MQTT 订阅消息时如何读取标头键:值对
【发布时间】:2020-12-31 04:54:57
【问题描述】:

当使用 pika 向我的 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

【问题讨论】:

    标签: python-3.x rabbitmq mqtt paho pika


    【解决方案1】:

    Pika 是一个以 AMQP 格式发布消息的 AMQP 客户端。

    Paho 是一个 MQTT 客户端,因此只能处理该格式的消息。在 MQTT v3(Paho Python 客户端还不支持 MQTT v5)协议没有任何范围来保存消息属性。 MQTT v3 消息的唯一属性是 topicpayloadQOSretained 位。

    所以 RabbitMQ 代理必须在将消息从队列移动到 MQTT 主题之前进行格式转换并剥离属性。

    所以基本上我是说 MQTT 消息中没有要读取的属性。

    编辑: 看起来最新版本的 Paho Python 客户端确实支持 MQTTv5(文档刚刚没有更新)。虽然 MQTTv5v 确实支持标头中的键/值对属性,但它将取决于客户端实际使用 MQTTv5 和支持 MQTTv5 的 RabbitMQ 进行连接并将值复制到新格式。

    【讨论】:

    • Hi@hardillb ,如果我们使用 paho MQQT 将有效负载和标头发布到 rabbitmq,那么我们可以在客户端使用 paho MQQT 检索标头吗?
    • 不,正如我所说,MQTT v3 中不支持键值对
    • 所以你的建议目前没有解决这个问题的方法?
    • 我想我已经多次说得很清楚了
    • 其实最新版的Paho Python客户端好像确实支持MQTT v5。我已经编辑了答案以明确这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多