AMQP 异步侦听器仅在事件发生后才开始侦听消息
AMQP async listener starts listening to message only after an event happens
我目前有一个 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;
}
然而,无论 EventListener 是什么,messageListenerContainer() bean 似乎 运行 在启动时。
仅在 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();
}
我目前有一个 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;
}
然而,无论 EventListener 是什么,messageListenerContainer() bean 似乎 运行 在启动时。
仅在 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();
}