gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:18:52 26 4
gpt4 key购买 nike

我有多个模块,它们通过消息队列 (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等注解

最佳答案

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

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

不要忘记在应用程序结束时 stop()destroy() 它们。

关于java - 不同队列的多个监听器 - Spring Rabbit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com