Java Spring AMQP中与SimpleMessageListenerContainer相关的密切连接
我目前正在开发一个基于事件的异步AMQP消息侦听器,如下所示:Java Spring AMQP中与SimpleMessageListenerContainer相关的密切连接,java,spring,amqp,spring-amqp,spring-rabbit,Java,Spring,Amqp,Spring Amqp,Spring Rabbit,我目前正在开发一个基于事件的异步AMQP消息侦听器,如下所示: @Configuration public class ExampleAmqpConfiguration { @Bean(name = "container") public SimpleMessageListenerContainer messageListenerContainer() { SimpleMessageListenerContainer container = new Simple
@Configuration
public class ExampleAmqpConfiguration {
@Bean(name = "container")
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);
}
};
}
}
我已将容器bean的autostart属性更改为false。我已经将这个bean自动连接到一个事件列表器,该事件列表器在StartEvent发生时启动容器:
@EventListener
public void startContainer(StartEvent startEvent) {
this.container.start();
}
同时,我还将bean自动连接到另一个事件,该事件会停止容器并关闭容器,希望容器会停止,并且不会有延迟连接:
@EventListener
public void endContainer(EndEvent endEvent) {
this.container.stop();
this.container.shutdown();
}
但是,在EndEvent之后,我在RabbitMQ管理控制台中发现,所有通道都已关闭,但仍然存在延迟连接
这是否意味着shutdown()不是删除延迟连接的正确方法?如果是这样,正确的方法是什么
谢谢。您需要在
CachingConnectionFactory
上调用resetConnection()
,以关闭连接;如类名所示;连接已缓存。您需要在CachingConnectionFactory
上调用resetConnection()
,以关闭连接;如类名所示;连接被缓存