Как прослушать очередь разных виртуальных хостов? - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно подключить несколько виртуальных хостов одновременно, потому что я хочу прослушивать очереди на нескольких хостах.Режим на основе конфигурации создает только одно соединение по умолчанию.Как я могу создать несколько соединений?Как указать другую фабрику соединений при регистрации слушателей с аннотациями?

spring.rabbitmq.host=10.0.0.0
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=test
spring.rabbitmq.virtual-host=ABC

Как указать фабрику соединений в нескольких зарегистрированных слушателях?

@RabbitListener(queues = Constants.QUEUE_NAME)
    public void receiveMessage(Test message) {
        System.out.println("Received <" + message.getA() + ">");
}

1 Ответ

0 голосов
/ 22 февраля 2019

В настоящее время нет способа сделать это только с помощью свойств.Вы должны определить несколько CachingConnectionFactory @Bean s и несколько компонентов фабрики контейнеров слушателя, каждый из которых указывает на каждую фабрику соединений.

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

У нас есть открытый выпуск , чтобы добавить поддержку автоматической настройки нескольких фабрик.

Автор имеет проект, который может помочь вам .

Если вы работаете с несколькими фабриками контейнеров ...

Аннотация @RabbitListenerимеет эту опцию:

/**
 * The bean name of the {@link org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory}
 * to use to create the message listener container responsible to serve this endpoint.
 * <p>If not specified, the default container factory is used, if any.
 * @return the {@link org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory}
 * bean name.
 */
String containerFactory() default "";

Итак, вы можете объявить bean-компонент для RabbitListenerContainerFactory и добавить туда любой пользовательский ConnectionFactory:

/**
 * @param connectionFactory The connection factory.
 * @see AbstractMessageListenerContainer#setConnectionFactory(ConnectionFactory)
 */
public void setConnectionFactory(ConnectionFactory connectionFactory) {

Это действительно тот случай, когда только одинvirtual host для каждой фабрики соединений:

/**
 * Set the virtual host.
 * @param virtualHost the virtual host to use when connecting to the broker
 */
public void setVirtualHost(String virtualHost) {

См. Дополнительную информацию о пользовательском containerFactory в Документах: https://docs.spring.io/spring-amqp/docs/2.1.4.RELEASE/reference/#using-container-factories

...