Java Spring AMQP中与SimpleMessageListenerContainer相关的密切连接

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

我目前正在开发一个基于事件的异步AMQP消息侦听器,如下所示:

@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()
,以关闭连接;如类名所示;连接被缓存