Поделитесь сообщением выборочно с работником в rabbitmq

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

W(i) - Worker, который получает отдельные сообщения

W(sp) - специальный работник, который получает все сообщения

В - Очередь

'---------------------------------------Q-------------------------

|--------------------------- |---------------------------- |
|--------------------------- |---------------------------- |
W1,W(sp)-------------W2,W(sp)-----------W3,W(sp)

Как вы можете видеть, W1, W2, W3, W4 — это разные рабочие процессы, каждый из которых получает разные сообщения, как обычный рабочий процесс. Каждый получит одно задание из очереди

Однако каждое из сообщений должно использоваться как обмен W(sp). Как я могу этого достичь. Есть ли какой-то параметр, который я могу установить, чтобы W (sp) всегда мог получать все события из очереди

Будет здорово, если вы сможете помочь

ИЗМЕНИТЬ 1

Мне было немного сложно понять вопрос, вот еще одна версия

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

Eg:

счетчик - C1,C2,C3,C4

специальный потребитель - Csp

очередь - Q

Каждое задание в Q должно транслироваться одному из C1, C2, C3, C4 и совместно использоваться с Csp. Таким образом, задание из Q распределяется между Csp и одним из C(i). Благодаря этому мы сможем параллельно обрабатывать задания в C1, C2, C3, C4 и т. д. и в то же время проверять каждое из заданий в Q с помощью моего потребительского Csp.


person prajnavantha    schedule 19.02.2015    source источник


Ответы (2)


Насколько я понимаю, вам нужен обмен темами. Настройте разные ключи маршрутизации для сообщений. И пусть рабочие выбирают то, что им интересно. Например, рабочий, которому нужно получить все сообщения, может создать очередь и привязать ее к обмену с помощью ключа привязки «#» (хэш).

Мы создали три привязки: Q1 связан с ключом привязки ".orange." и Q2 с "..rabbit" и "lazy.#".

Эти привязки можно резюмировать следующим образом:

Q1 is interested in all the orange animals.
Q2 wants to hear everything about rabbits, and everything about lazy animals.

Сообщение с ключом маршрутизации, установленным на «quick.orange.rabbit», будет доставлено в обе очереди. Сообщение "lazy.orange.elephant" также будет отправлено им обоим. С другой стороны, «quick.orange.fox» попадет только в первую очередь, а «lazy.brown.fox» — только во вторую. «lazy.pink.rabbit» будет доставлен во вторую очередь только один раз, даже если он соответствует двум привязкам. «quick.brown.fox» не соответствует ни одной привязке, поэтому она будет удалена.

ОБНОВЛЕНО:

Взгляните на репозитории этого парня: https://github.com/simonmacmullen

Я думаю, вам будет интересно это: https://github.com/simonmacmullen/random-exchange

This exchange type is for load-balancing among consumers.
person Vor    schedule 19.02.2015
comment
Спасибо за ответ, Вор, однако я вижу проблему. Использование темы передает одно и то же сообщение всем потребителям, подключенным к этой очереди. Я хочу делиться заданиями в циклическом режиме, чтобы задание давалось потребителю только один раз, поскольку я хочу выполнять параллельную обработку задания, и в то же время мне нужен специальный потребитель, который также будет получать все задания из очереди. Например: counsumer - C1,C2,C3,C4 специальный потребитель - Csp очередь - Q Каждое задание должно транслироваться на один из C1,C2,C3,C4 и Csp. Таким образом, msg распределяется между Csp и одним из C(i) - person prajnavantha; 19.02.2015

Спасибо за помощь, но я думаю, что это не помогло, однако я решил проблему. Речь шла только о том, чтобы дать очереди имя, чтобы все потребители, подключенные к очереди, получали работу, совместно используемую в циклическом режиме. Вот пример

счетчик - C1,C2,C3,C4

специальный потребитель - Csp

очередь - Q

Я должен создать соединение следующим образом

Испускают:

channel.exchange_declare(exchange='logs2',type='fanout')

Для получения событий от C(i) я должен привязать свою очередь к обмену с именем очереди

channel.queue_bind(exchange='logs2',queue='hello')

Любое количество потребителей, подключенных к этой очереди, будет получать одно задание за раз в циклическом режиме.

Для получения событий от биржи с Csp

channel.queue_bind(exchange='logs2',queue='special')

Эта специальная очередь будет получать все события от биржи, так как она связана с логами биржи2.

person prajnavantha    schedule 20.02.2015