多个SimpleMessageListenerContainer容器

时间:2018-04-05 00:54:02

标签: rabbitmq spring-amqp

我正在收听2个RabbitMQ队列。对于1个队列,我需要一个消费者来确保一次只处理一个消息。 第二个队列可以在一秒钟内接收大量消息,我需要能够一次消耗许多消息。

我有以下代码,它确实可以正常工作。但我想知道是否有更好的方法来做到这一点。

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
        MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setMessageConverter(Jackson2JsonMessageConverter());
    container.setQueueNames(QUEUE1);
    container.setMessageListener(listenerAdapter);
    container.setAdviceChain(new Advice[]{interceptor()});
    return container;
}

@Bean
SimpleMessageListenerContainer container1(ConnectionFactory connectionFactory,
        MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setMessageConverter(Jackson2JsonMessageConverter());
    container.setQueueNames(QUEUE2);
    container.setMessageListener(listenerAdapter);
    container.setAdviceChain(new Advice[]{interceptor()});
    container.setConcurrentConsumers(1);
    container.setMaxConcurrentConsumers(10);
    return container;
}

@Bean
MessageListenerAdapter listenerAdapter() {
    return new MessageListenerAdapter(queueService, "consume");
}

1 个答案:

答案 0 :(得分:2)

你做的是绝对正确的。如果您需要针对不同队列的不同使用者,则必须配置不同的 var gps = DB.GPS.ToList(); return Ok( new { results = gps }); 。您可以考虑使用Spring Integration AMQP通道适配器:https://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/amqp.html

相关问题