gpt4 book ai didi

java - AMQP 异步监听器仅在事件发生后才开始监听消息

转载 作者:行者123 更新时间:2023-12-02 02:38:15 25 4
gpt4 key购买 nike

我目前有一个 AMQP 异步监听器,它自动监听队列上的消息。

但是,我的要求是,在某个事件发生之前,我不应该让这个监听器监听消息。对于事件,我正在考虑使用 @EventListener 注释。

异步监听器如下所示:

@Configuration
public class ExampleAmqpConfiguration {

@Bean
public SimpleMessageListenerContainer messageListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueueName("some.queue");
container.setMessageListener(exampleListener());
return container;
}

@Bean
public ConnectionFactory rabbitConnectionFactory() {
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory("localhost");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
return connectionFactory;
}

@Bean
public MessageListener exampleListener() {
return new MessageListener() {
public void onMessage(Message message) {
System.out.println("received: " + message);
}
};
}
}

我正在考虑将 @EventListener 添加到方法 messageListenerContainer() 中,所以它看起来像这样:

@Bean
@EventListener
public SimpleMessageListenerContainer messageListenerContainer(CustomeEvent customEvent) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueueName("some.queue");
container.setMessageListener(exampleListener());
return container;
}

但是,messageListenerContainer() bean 似乎只是在启动时运行,而与 EventListener 无关。

仅在 CustomEvent 发生后,该异步监听器监听消息的正确方法是什么?

谢谢。

最佳答案

将容器 autoStartup 属性设置为 false

在您的@EventListener中,自动连接容器并start()它。

编辑

public class MyEventListener {

@Autowired
private SimpleMessageListenerContainer container;

@EventListener
public void someEvent(MyEvent event) {
this.container.start();
}

}

@Bean
public MyEventListener listener() {
return new EventListener();
}

关于java - AMQP 异步监听器仅在事件发生后才开始监听消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45921860/

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