Динамическое добавление очередей слушателю кролика во время выполнения - PullRequest
0 голосов
/ 08 января 2019

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

В кролике (с использованием spring-amqp) у вас есть аннотация кроличьего сланца, которая позволяет мне статически назначать очереди, которые будут обрабатывать эти конкретные потребители.

Мой вопрос - с кроликом и пружиной, есть ли для меня чистый способ получить часть очередей (скажем, очереди, которые начинаются с ac), а затем прослушать любые очереди, которые создаются во время работы потребителя.

Пример (в начале):

  • муравьиные очереди
  • яблочно-очереди
  • кошачьи очереди

Пока потребитель работает:

  • Добавление очереди на летучую мышь

Вот (очень простой) код, который у меня сейчас есть:

    @Component
    public class MessageConsumer {

        public MessageConsumer() {
            // ideally grab a section of queues here, initialize a parameter and give to the rabbitlistener annotation
        }

        @RabbitListener(queues= {"ant-queue", "apple-queue", "cat-queue"})
        public void processQueues(String messageAsJson) {
            < how do I update the queues declared in rabbit listener above ? >
        }
    }

Edit:

Я должен добавить - я просмотрел весеннюю документацию по amqp, которую нашел в Интернете, и я не нашел ничего, кроме того, чтобы статически (либо жестко, либо через свойства) объявлять очереди

1 Ответ

0 голосов
/ 08 января 2019
  • Ввести (@Autowired или иным образом) RabbitListenerEndpointRegistry.

  • Получить ссылку на контейнер слушателя (используйте атрибут id в аннотации, чтобы дать ему известный идентификатор) (registry.getListenerContainer(id)).

  • Приведите контейнер к AbstractMessageListenerContainer и позвоните addQueues() или addQueueNames().

Обратите внимание, что более эффективно использовать DirectMessageListenerContainer при динамическом добавлении очередей; с SimpleMessageListenerContainer потребитель (ы) останавливаются и перезапускаются. С прямым контейнером каждая очередь получает своего потребителя (ей).

См. Выбор контейнера .

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