Además dinámica de colas a un oyente de conejo en tiempo de ejecución

user10776719:

Tengo un proyecto en el que vamos a tener cientos (potencialmente miles) de colas de conejo y de cada una de estas colas tendrá que ser consumido por un grupo de consumidores.

En el conejo (usando la primavera-amqp), que tiene la anotación rabbitlistener que me permite Asignación estática de las colas se encargará de esto consumidor en particular (s).

Mi pregunta es - con conejo y la primavera, hay una manera limpia para mí para agarrar una sección de colas (digamos colas que empiezan con corriente alterna) y luego también escuchar cualquier colas que se crean mientras que el consumidor se está ejecutando.

Ejemplo (en el arranque):

  • hormiga-cola
  • apple-cola
  • cat-cola

Mientras que los consumidores se está ejecutando:

  • Añadir murciélago cola

Aquí está el (muy simple) Código Actualmente tengo:

    @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 ? >
        }
    }

Editar:

Debo añadir - He pasado por la documentación amqp primavera he encontrado en Internet y no he encontrado nada fuera de forma estática (ya sea a través de hardcoded o propiedades) declarar las colas

Gary Russell:
  • Inject ( @Autowiredo no) el RabbitListenerEndpointRegistry.

  • Obtener una referencia al contenedor oyente (utilizar el idatributo en la anotación para darle un ID conocido) ( registry.getListenerContainer(id)).

  • Emitir el recipiente en una AbstractMessageListenerContainery la llamada de addQueues()o addQueueNames().

Tenga en cuenta que es más eficiente utilizar una DirectMessageListenerContaineral añadir colas de forma dinámica; con un SimpleMessageListenerContainerconsumidor (s) se detiene y reinicia. Con el contenedor directa, cada cola obtiene su propio consumo (s).

Ver La elección de un contenedor .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=168809&siteId=1
Recomendado
Clasificación