LINUX.ORG.RU

RabbitMQ «подписки»

 ,


1

3

Добрый день, есть сервер, который делает публикации в Rabbit в определенные очереди. Есть клиент на Python , который эти очереди должен слушать. Во всех примерах для Python+RabbitMQ генерации подписки на очереди происходит до запуска «прослушки», но в какой-то момент времени нужно будет «подписаться» на еще какую-нибудь очередь, возможно ли это? http://pika.readthedocs.io/en/latest/examples/asynchronous_consumer_example.html

Вот например этот пример, но как мне добавить новую очередь не закрывая старую? Если, например, для Redis есть модуль tornadoredis в котором все это делается довольно тривиально, то с RabbitMQ не могу найти ничего аналогичного...

Вот например этот пример, но как мне добавить новую очередь не закрывая старую?

Очень желательно открыть новый channel в рамках текущего connection. И потом в новом канале уже подписываться на новую очередь. Хз как это в python, но в C/Golang это довольно тривиально :)
Судя по примеру выше, у тебя есть

self._connection

И далее дергай все так же, как в примере ... Если уверен, что у тебя очередь уже существует на момент запуска скрипта, можешь сразу вызвать (при условии что у тебя дефолтный exchange или роутинг уже настроен)
self._channel.basic_consume(self.on_message, self.QUEUE)

joy4eg ★★★★★
()
Ответ на: комментарий от hell_wood

А в одном канале нельзя подписываться на несколько очередей?

Можно, но читай доки, так делать не советуют. Банальный пример: один канал на все паблишеры и консумеры. В какой-то момент в очереди происходит exception, канал закрывается и больше не юзабельный. Следствие - все остальные паблишеры и консумеры отвалятся, и их нужно будет перезапустить. Поэтому проще сразу всю логику разнести по разным каналам, так будет надежней.

joy4eg ★★★★★
()
Ответ на: комментарий от joy4eg

Один открытый канал это новое соединение получается?

hell_wood
() автор топика
Ответ на: комментарий от hell_wood

Cоздает ли новый коннект к кролику открытие нового канала?

Нет. Коннекшн один, и у каждого коннекшена может быть 100500 каналов. Другими словами коннекшн это транспортный уровень, а канал - прикладной.

joy4eg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.