Я пытаюсь получить @RabbitListener для прослушивания нескольких очередей с разных хостов, загруженных из свойств.очереди идентичны и требуют одинаковой обработки сообщений.
Мне удалось сделать это «статически», объявив мои фабрики следующим образом:
@Bean
public ConnectionFactory defaultConnectionFactory() {
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(hosts);
cf.setPort(port);
cf.setUsername(username);
cf.setPassword(password);
cf.setConnectionLimit(10000);
cf.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
return cf;
}
@Bean
public SimpleRabbitListenerContainerFactory connectionFactory2() {
SimpleRabbitListenerContainerFactory sf = new SimpleRabbitListenerContainerFactory();
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(host2);
cf.setPort(port2);
cf.setUsername(username2);
cf.setPassword(password2);
cf.setConnectionLimit(connectionLimit);
cf.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
sf.setConnectionFactory(cf);
return sf;
}
И затем добавив аннотации @RabbitListener моему слушателюКласс выглядит так:
@RabbitListener (queues = "q1")
@RabbitListener (queues = "q2" , containerFactory = "connectionFactory2")
public class RabbitListener {
Но я хотел бы иметь возможность создавать фабрики соединений при запуске, загружая некоторый список свойств, например rabbit.host[i]
, а затем динамически добавлять его в мой слушатель.
Это возможно?Каковы лучшие практики для этого варианта использования?