#python-3.x #rabbitmq #mqtt #paho #pika
#python-3.x #rabbitmq #mqtt #paho #pika
Вопрос:
Я добавляю пару ключ заголовка: значение при публикации сообщения моему брокеру rabbitmq, используя pika, например
channel.basic_publish(exchange=self.exchange,
routing_key=self.routing_key,
properties=pika.BasicProperties(
headers={'key': 'value'}
),
body=message)
На моей стороне клиента я подписываюсь на тему с помощью Paho MQTT с помощью websockets. Как я могу получить тот же заголовок сообщения, используя 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
Ответ №1:
Pika — это клиент AMQP, публикующий сообщения в формате AMQP.
Paho является клиентом MQTT и, как таковой, может обрабатывать сообщения только в этом формате. В MQTT v3 (клиент Paho Python еще не поддерживает MQTT v5) протокол не имеет какой-либо области для хранения атрибутов сообщения. Единственными свойствами, которые имеет сообщение MQTT v3, являются topic
, payload
, QOS
и retained
бит.
Таким образом, брокер RabbitMQ должен выполнять преобразование формата и удаление атрибутов перед перемещением сообщения из очереди в раздел MQTT.
Итак, по сути, я говорю, что в сообщении MQTT нет атрибутов для чтения.
РЕДАКТИРОВАТЬ: похоже, что последняя версия клиента Paho Python поддерживает MQTTv5 (документ просто не был обновлен). Хотя MQTTv5v поддерживает атрибуты пары ключ / значение в заголовке, это будет зависеть от того, действительно ли клиент подключается с помощью MQTTv5 и RabbitMQ, поддерживающих как MQTTv5, так и копирование значений в новый формат.
Комментарии:
1. Привет @hardillb, если мы опубликуем полезную нагрузку и заголовок с помощью paho MQQT в rabbitmq, можем ли мы получить заголовок с помощью paho MQQT на стороне клиента?
2. Нет, как я уже сказал, в MQTT v3 нет поддержки пар ключ-значение
3. итак, вы предполагаете, что в настоящий момент для этого нет решения, верно?
4. Я думаю, что уже несколько раз говорил это очень четко
5. На самом деле похоже, что последняя версия клиента Paho Python поддерживает MQTT v5. Я отредактировал ответ, чтобы прояснить это.