как асинхронно потреблять из 2 очередей RabbitMQ от одного потребителя с помощью pika

Я пишу потребителя, которому нужно использовать из двух разных очередей.

1-> для фактических сообщений (заранее объявленная очередь).

2-> для командных сообщений для управления поведением потребителя (динамически объявляется потребителем и привязывается к существующему обмену с ключом маршрутизации в определенном формате (требуется один для каждого экземпляра запущенного потребителя))

Я использую соединение выбора для асинхронного потребления.

    self.channel.basic_qos(prefetch_count = self.prefetch_count)
    log.info("Establishing channel with the Queue: "+self.commandQueue)
    print "declaring command queue"
    self.channel.queue_declare(queue=self.commandQueue,
                                durable = True,
                                exclusive=False,
                                auto_delete=True,
                                callback = self.on_command_queue_declared)

Очередь не объявляется или обратный вызов не вызывается.

С другой стороны, сообщения из реальной очереди сообщений не используются, так как я добавил этот блок кода.

Журналы Pika не показывают ошибок или сбоев в работе потребительского приложения.

Кто-нибудь знает, почему это происходит, или есть лучший способ сделать это?


person rajesh.kanakabandi    schedule 19.08.2015    source источник
comment
Я даже попытался использовать уже существующую очередь для очереди команд. и выполнил basic_consume в обеих очередях, но ни одна из очередей не используется.   -  person rajesh.kanakabandi    schedule 20.08.2015
comment
Вам нужно использовать сообщения из разных очередей для разделения функций, или сообщения из разных очередей могут вызывать одну и ту же функцию?   -  person eandersson    schedule 20.08.2015
comment
Было бы идеально использовать другой метод обратного вызова. но вы можете заставить его использовать тот же метод, который тоже будет отличным.   -  person rajesh.kanakabandi    schedule 20.08.2015


Ответы (1)


Вы видели здесь пример: http://pika.readthedocs.org/en/latest/examples/asynchronous_consumer_example.html?

И несколько примеров блокировки: http://pika.readthedocs.org/en/latest/examples/blocking_consume.html http://pika.readthedocs.org/en/latest/examples/blocking_consumer_generator.html

Сравнение блокировки и выбора соединения: http://pika.readthedocs.org/en/latest/examples/comparing_publishing_sync_async.html

Блокировка и выбор соединений в предварительной версии pika 0.10.0 выполняются быстрее, и в этой версии исправлен ряд ошибок.

person user1778420    schedule 20.08.2015
comment
Да. Мой потребитель очень похож на пример потребителя синхронизации. Он отлично работает при потреблении из одной очереди. Но проблема в том, что моему потребителю нужно использовать несколько очередей. Есть ли для этого пример? - person rajesh.kanakabandi; 20.08.2015
comment
исправление: мой потребитель очень похож на пример асинхронного потребителя - person rajesh.kanakabandi; 24.08.2015
comment
Опубликуйте полный образец кода, демонстрирующий вашу проблему. Сообществу будет проще вам помочь. - person user1778420; 25.08.2015