针对不同队列的多个监听器 - Spring Rabbit

时间:2018-02-27 20:56:15

标签: java spring rabbitmq spring-amqp spring-rabbit

我有多个模块通过消息队列(Spring Rabbit)相互通信。有些模块生成消息而其他模块消耗消息。但是,单个模块可以侦听不同的队列,我在列表中有一个队列名称列表,因此我为每个队列名称创建了一个SimpleMessageListenerContainer,如下所示。

public void build() {
    for (String queueName: queues) {
        SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
        listenerContainer.setConnectionFactory(connectionFactory());
        listenerContainer.setQueueNames(queueName);
        listenerContainer.setMessageListener(listenerAdapter());
    }
}

@Bean
private MessageListenerAdapter listenerAdapter() {
    return new MessageListenerAdapter(new MessageListener() {
        @Override
        public void onMessage(Message message) {
            System.out.println(message.getBody());
        }
    }, "onMessage");
}

此实现对我不起作用,消费者未在队列中注册,并且在执行期间抛出任何错误或异常。

注意:我使用的是Spring,但我不能使用@RabbitListener

之类的注释

1 个答案:

答案 0 :(得分:1)

当您手动声明SimpleMessageListenerContainer而不是bean时,您还必须确保应用程序上下文回调和生命周期:

listenerContainer.setApplicationContext()
listenerContainer.setApplicationEventPublisher()
listenerContainer.afterPropertiesSet()
listenerContainer.start()

在申请结束时不要忘记stop()destroy()