Доступ к одним и тем же сообщениям для нескольких потребителей RabbitMQ

Требование: 1) Мне нужно получить данные, хранящиеся в базе данных Mongo, через Java-приложение и, используя обмен темами и ключи привязки, создать 3 очереди на RabbitMQ. Я реализовал все до этого момента.

Проблема начинается со 2-го пункта и далее.

2) Когда сообщения должны быть доступны нескольким потребителям из всех 3-х очередей. Но когда первый потребитель использует сообщения из 3 очередей, он будет недоступен для остальных потребителей. Как сделать сообщения доступными для нескольких потребителей.

Есть ли способы добиться этого или это требование имеет какие-либо альтернативные решения.


person Badal    schedule 30.04.2015    source источник


Ответы (1)


Все ваши потребители должны предоставлять свои уникальные queue и привязывать их к одному и тому же exchange.

В AMQP нет такой абстракции Topic, как в JMS.

Даже если мы сможем опубликовать сообщение через тему или разветвленный обмен, сообщение будет помещено в очередь как одна запись, поэтому только один потребитель сможет забрать его из файла the.

Конфиг для моего предложения может выглядеть так:

<queue id="commandQueue" name="#{node.id}.command"
       auto-delete="true"/>

<fanout-exchange name="commandsExchange">
    <bindings>
        <binding queue="commandQueue"/>
    </bindings>
</fanout-exchange>

<amqp:inbound-channel-adapter id="commandConsumer"
                              queue-names="#{commandQueue.name}"
                              channel="commandChannel"/>

При этом все экземпляры моего приложения привязывают свои уникальные queue (на основе абстракции node.id) к одному и тому же commandsExchange. И опубликованное сообщение на commandsExchange будет доставлено на все мои узлы.

auto-delete="true" помогает мне избежать лишних сообщений для моей очереди, если узел не работает.

ХТН

person Artem Bilan    schedule 30.04.2015
comment
Спасибо Артем за прекрасное предложение. Я постараюсь реализовать, как было предложено.. позвольте мне рассказать о моих выводах... - person Badal; 30.04.2015