gpt4 book ai didi

java - 关闭Spring AMQP中与SimpleMessageListenerContainer相关的连接

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

我目前正在开发一个基于事件的异步 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 Autowiring 到另一个停止容器并关闭容器的事件,希望容器能够停止并且不会出现延迟连接:

@EventListener
public void endContainer(EndEvent endEvent) {
this.container.stop();
this.container.shutdown();
}

但是,在 EndEvent 之后,我在 RabbitMQ 管理控制台中发现所有 channel 都已关闭,但仍然存在延迟连接。

这是否意味着 shutdown() 不是删除延迟连接的正确方法?如果是这样,正确的方法是什么?

谢谢。

最佳答案

您需要在CachingConnectionFactory上调用resetConnection()来关闭连接;正如类名所暗示的那样;连接被缓存。

关于java - 关闭Spring AMQP中与SimpleMessageListenerContainer相关的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941636/

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