Конфигурация RabbitMQ для нескольких очередей

По-видимому, я настроил единую очередь для получения пользовательских сообщений в своем приложении. Ниже приведена конфигурация.

<!-- Creates a queue for consumers to retrieve messages -->
<rabbit:queue name="UserPostpublishQueue" durable="true">
</rabbit:queue>

<!-- queue for sending notifications to users -->
<rabbit:queue name="notificationQueue" durable="true"/>


<!-- Fanout exchange for a pubsub bound to UserPostpublishQueue -->
<fanout-exchange name="broadcastEvents" durable="true" xmlns="http://www.springframework.org/schema/rabbit">
    <bindings>
        <binding queue="UserPostpublishQueue"/>
    </bindings>
</fanout-exchange>

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" retry-template="retryTemplate" 
exchange="broadcastEvents" channel-transacted="true"/>

В коде я только что автоматически подключил шаблон AMQP.

@Autowired
    AmqpTemplate amqpTemplate;
    amqpTemplate.convertAndSend(post);

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

Или мне создать еще один разветвленный обмен, а затем связать очередь уведомлений с этим обменом, но как мне тогда зарегистрировать этот новый обмен с помощью шаблона amqp?

Или мне создать прямой обмен как для сообщений пользователя, так и для очереди уведомлений?

Я не уверена. Любая помощь будет оценена по достоинству.


person underdog    schedule 08.12.2015    source источник


Ответы (1)


Начать следует с описания бизнес-требований.

Все варианты привязки, упомянутые пользователем, действительны.

  • Вы действительно можете добавить еще одну очередь в fanout exchange — и одно и то же сообщение будет размещено во всех очередях. Тематическое поведение.

  • Вы можете создать другую биржу и привязать туда эту очередь. В этом случае прямого обмена будет достаточно. Чтобы отправить сообщение именно в эту очередь (возможно, что-то отличное от сообщения), вы должны использовать другой метод AmqpTemplate:

    void convertAndSend(String exchange, String routingKey, Object message) throws AmqpException;
    

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

Недавно мы также добавили реализацию Spring AMQP для этих руководств в Spring. Образцы AMQP.

person Artem Bilan    schedule 09.12.2015
comment
Спасибо, Артем, образцы Spring AMQP очень помогли. - person underdog; 09.12.2015