Вот мой @Configuration
@Bean
public AmqpAdmin amqpAdmin()
{
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory());
DirectExchange dirExchange = new DirectExchange("evtExchange", true,
false);
rabbitAdmin.declareExchange(dirExchange);
rabbitAdmin.declareQueue(processQueue);
Binding processBinding = BindingBuilder.bind(processQueue)
.to(dirExchange).with("rkey.process");
rabbitAdmin.declareBinding(processBinding);
return rabbitAdmin;
}
@Bean
public RabbitTemplate rabbitTemplate()
{
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
return rabbitTemplate;
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory()
{
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
SimpleMessageListenerContainer container = factory
.createListenerContainer();
factory.setConcurrentConsumers(50);
factory.setMaxConcurrentConsumers(100);
container.setStartConsumerMinInterval(3000);
container.setQueues(processQueue);
factory.setAdviceChain(retryInterceptor());
return factory;
}
@Bean
public RetryOperationsInterceptor retryInterceptor()
{
return RetryInterceptorBuilder.stateless().maxAttempts(5)
.backOffOptions(1000, 2.0, 10000).recoverer(new RejectAndDontRequeueRecoverer()).build();
}
@Bean
public ProcessQueueListener processListener()
{
return new ProcessQueueListener();
}
@Bean
public ProcessQueueListener processListener2()
{
return new ProcessQueueListener();
}
@Bean
public ProcessQueueListener processListener3()
{
return new ProcessQueueListener();
}
А вот @RabbitListener
класс
@RabbitListener(containerFactory = "rabbitListenerContainerFactory", queues = "process")
public class ProcessQueueListener
{
public ProcessQueueListener()
{
}
@RabbitHandler
void receiveMessage(String message)
{
// doSomething
}
}
Только когда я создаю экземпляр processListener()
, processListener2()
и processListener3()
отдельно я начинаю видеть нескольких потребителей в администраторе RabbitMQ для очереди процесса, и каждый слушатель обрабатывает сообщения, в противном случае я просто вижу только одного потребителя, несмотря на указание setConcurrentConsumers()
Существует ли элегантный способобъявлять несколько слушателей по требованию, увеличивать и уменьшать в зависимости от необходимости.Или объявление нескольких @Bean
s единственный вариант?Или я что-то не так делаю?