Выборочная маршрутизация с RabbitMQ - PullRequest
3 голосов
/ 01 апреля 2012

У меня есть несколько очередей, связанных с одной темой, например с ключами маршрутизации:

1) big.yellow.rabbit
2) small.*.dog
3) small.*.*
4) *.*.cat
5) *.*.*

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

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

Примеры вышеупомянутых ключей:

big.yellow.rabbit -> 1) 
small.yellow.rabbit -> 3) 
small.white.cat -> 3)
big.grey.cat -> 4)
big.yellow.pig -> 5)

Я пришел к выводу, что общие типы обмена (прямой, тема, разветвление, заголовки) мне не помогут. И мне нужно реализовать новый пользовательский тип. Я прав?

Спасибо.

1 Ответ

6 голосов
/ 03 апреля 2012

Да, логика маршрутизации, которую вы описываете, не реализована ни одним из типов обмена по умолчанию в RabbitMQ;вам придется написать свой собственный.

Вам нужно будет написать плагин RabbitMQ .Более конкретно, вам нужно написать пользовательский тип обмена : вы можете найти множество примеров на странице Developer Tools .

Если вам нужны какие-либо указателио том, как начать работу или застрять, опубликуйте вопрос в списке рассылки RabbitMQ-Discuss .Разработчики RabbitMQ читают этот список и не оставляют вопросов без ответа.

...