Além dinâmica de filas para um ouvinte de coelho em tempo de execução

user10776719:

Eu tenho um projeto onde nós estamos indo ter centenas (potencialmente milhares) de filas em coelho e de cada uma dessas filas precisará ser consumida por um pool de consumidores.

No coelho (usando primavera-AMQP), você tem a anotação rabbitlistener que me permite atribuir estaticamente as filas esse consumidor particular (s) irá lidar.

A minha pergunta é - com coelho e na primavera, há uma maneira limpa para me para pegar uma seção de filas (digamos filas que começam com ac) e depois também ouvir para todas as filas que são criadas, enquanto o consumidor está em execução.

Exemplo (no início):

  • formiga-fila
  • maçã-fila
  • cat-fila

Enquanto consumidor está em execução:

  • Adicionar bat-fila

Aqui está o código (muito simples) Eu tenho atualmente:

    @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:

Devo acrescentar - Eu tenho ido através da documentação primavera AMQP I encontrados on-line e eu não ter encontrado fora nada de estaticamente (ou codificado ou através de propriedades) declarando as filas

Gary Russell:
  • Injectar ( @Autowiredou de outra forma) a RabbitListenerEndpointRegistry.

  • Obter uma referência para o recipiente ouvinte (usar o idatributo na anotação para dar-lhe um ID conhecida) ( registry.getListenerContainer(id)).

  • Lançar o recipiente em uma AbstractMessageListenerContainere chamada addQueues()ou addQueueNames().

Note-se que é mais eficiente usar um DirectMessageListenerContainerquando a adição de filas de forma dinâmica; com um SimpleMessageListenerContainerconsumidor (s) são parados e reiniciado. Com o recipiente direta, cada fila recebe o seu próprio consumo (s).

Consulte Escolhendo um recipiente .

Acho que você gosta

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