2017-02-21 16 views
0

Я создаю настройку рабочей очереди, где разные рабочие/потребители имеют разные возможности. Под этим я подразумеваю, что не все рабочие элементы могут управляться всеми работниками.RabbitMQ для рабочей очереди с использованием пользователей с различными возможностями

Скажем, у меня есть следующие рабочие:

Worker A 
    Capability 1 
    Capability 2 
    Capability 3 
Worker B 
    Capability 1 
Worker C 
    Capability 1 
    Capability 3 
  • Если работа требует Capability 1, он может быть запущен любым работником.
  • Если требуется работа Capability 1 и Capability 2, ее может обслуживать только Worker A.
  • Если работа требует Capability 1 и Capability 3 он может быть запущен Worker A или Worker C
  • и так далее ...

Вопрос

ли RabbitMQ способен/подходит для диспетчерских рабочих мест для таких настроить?

ответ

0
Is RabbitMQ capable/suitable for dispatching jobs for such a setup? 

Кролик MQ является очень гибкость в плане маршрутизации сообщений, а также многих других приятных особенностей он приходит с. Это определенно способно делать то, что вы надеетесь сделать. Подходит ли этот вопрос гораздо сложнее, потому что он зависит от многих других факторов.

Вот один способ настроить то, что вы пытаетесь сделать

  1. Создать Прямой обмен (назовем его JobExchange).
  2. Создать 3 очередями (JobType1.queue, JobType2.queue & JobType3.queue)
  3. Бринд все 3 Очереди к вашей бирже
  4. ли мигранта слушать JobType1.queue, JobType2.queue & JobType3.queue
  5. Есть работник B слушать JobType1.queue
  6. Have Worket С слушать JobType1.queue & JobType3.queue

Примечание: Если существует несколько потребителей, которые имеют возможность обрабатывать определенную работу (пример: Рабочие А, В & С может обрабатывать JobType1) , нет способа контролировать, кто берет сообщение из очереди (JobType1.queue в этом случае). Таким образом, один из трех рабочих получит сообщение, а два других не получат его.

+0

спасибо. Одна вещь, однако, работа может иметь более одного требования. Означает ли это, что я должен создавать очереди для каждой комбинации требований? Это не вариант для меня, я боюсь, потому что количество индивидуальных условий составляет> 20, поэтому все комбинации будут очень большим количеством очередей ... – anorm

+0

В этом случае потребуется более сложный обмен. Что-то вроде Тема/Заголовки Ex хорошо подходит. С помощью темы EX вам нужно будет создать объявление с иерархией ключей маршрутизации и посмотреть, можете ли вы фильтровать сообщения в соответствии с вашими потребностями. Если нет реальной иерархии сообщений, используйте обмен заголовками, где вы можете установить несколько заголовков и сказать кролику, чтобы он соответствовал любому/в зависимости от того, что вам нужно. В качестве побочного примечания, если вы не можете добиться фильтрации на первом уровне, вам, возможно, придется создать иерархию обменов и разделить их где-то вниз по течению. Подсказка: Ex -> Ex привязка разрешена. –