Как динамически добавлять новые очереди (с разных хостов) в @RabitListener? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь получить @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], а затем динамически добавлять его в мой слушатель.

Это возможно?Каковы лучшие практики для этого варианта использования?

1 Ответ

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

Вы не можете сделать это со статическими @RabbitListener аннотациями, но вы можете программно зарегистрировать конечные точки слушателя .

Вы можете использовать SimpleRabbitListenerEndpoint, как показано там, или MethodRabbitListenerEndpoint, если вы хотите вызвать метод POJO (например, @RabbitListener.

Вы можете подключить на соответствующем заводе перегруженным registerEndpoint методом.

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