Страницы

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

суббота, 21 декабря 2019 г.

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

#java #rabbitmq


В мою систему отправляется больше количество сообщений из разных систем. Допустим,
сообщения для автомобилей разных марок.

При каждой отправке новой марки автомобилей из какой-либо системы создается новая
очередь (например, auto.kia, auto.lada и т.п.) в итоге в реббите может быть произвольное
количество очередей.

Но, у меня есть один воркер (Consumer), который должен собирать и обрабатывать сообщения
из всех этих очередей. Как реализовать множества очередей одним воркером?
    


Ответы

Ответ 1



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

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

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