Используя pika, можно ли прочитать обязательные аргументы rabbitmq? - PullRequest
0 голосов
/ 23 октября 2018

Посмотрите на следующий снимок экрана

enter image description here

В моей очереди есть привязка с обменом с именем foo, принимающая только сообщения с ключом маршрутизации bar,Я также определил пару аргументов {baz: qux}.Теперь у меня есть следующий код:

credentials = pika.PlainCredentials(...)
parameters = pika.ConnectionParameters(...)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback, queue='this_queue')

И обратный вызов имеет следующую подпись:

def callback(channel, method, properties, body):
    ....

Теперь вопрос: как мне получить доступ к аргументам ({baz: qux}) внутри обратного вызова,Возможно ли это вообще?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете использовать мою RabbitMQ библиотеку amqpstorm для получения этого типа информации.

from amqpstorm.management import ManagementApi

API = ManagementApi('http://127.0.0.1:15672', 'guest', 'guest')
print(API.queue.bindings('simple_queue', virtual_host='/'))

Результат будет выглядеть примерно так:

[
    {
        "source": "",
        "vhost": "/",
        "destination": "simple_queue",
        "destination_type": "queue",
        "routing_key": "simple_queue",
        "arguments": {},
        "properties_key": "simple_queue"
    },
    {
        "source": "amq.direct",
        "vhost": "/",
        "destination": "simple_queue",
        "destination_type": "queue",
        "routing_key": "test",
        "arguments": {},
        "properties_key": "test"
    }
]

Больше доступных примеров здесь .

0 голосов
/ 23 октября 2018

Это невозможно, поскольку AMQP не предоставляет эту информацию в ответе на basic.consume.Вы можете использовать HTTP API для получения этой информации, если у вас включен плагин rabbitmq_management (что необходимо, если вы сделали этот снимок экрана).


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает список рассылки rabbitmq-users и только иногда отвечает на вопросы о StackOverflow.

...