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



我目前有一个 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 如何。

此异步列表器仅在自定义事件发生后侦听消息的正确方法是什么?

谢谢。

将容器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();
}

相关内容