В настоящее время нет способа сделать это только с помощью свойств.Вы должны определить несколько 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