Страницы

Поиск по вопросам

пятница, 9 ноября 2018 г.

RabbitMQ несколько очередей на одного потребителя

В мою систему отправляется больше количество сообщений из разных систем. Допустим, сообщения для автомобилей разных марок.
При каждой отправке новой марки автомобилей из какой-либо системы создается новая очередь (например, auto.kia, auto.lada и т.п.) в итоге в реббите может быть произвольное количество очередей.
Но, у меня есть один воркер (Consumer), который должен собирать и обрабатывать сообщения из всех этих очередей. Как реализовать множества очередей одним воркером?


Ответ

Звучит как классический случай topic exchange
В них требуется, чтобы routing_key в сообщениях отправителя (producer) состоял из набора слов, разделённых точками, ваши auto.lada и auto.kia как раз подходят.
Тогда binding_key принимающего (consumer), содержащий спецсимволы * и # играет роль шаблона вроде регулярного выражения:
* означает "одно любое слово" # означает "любое число (даже 0) любых слов".
...и ключи auto.lada и auto.kia оба подойдут под шаблон auto.* у принимающего.
Переменной при таком раскладе будет не очередь, а ключ сообщений (routing key для отправителя). Распределение происходит в рамках одной очереди. Много очередей для этой цели вам и не нужно. Подробнее в руководстве по AMQP

Комментариев нет:

Отправить комментарий