gpt4 book ai didi

spring - 关闭程序的 DefaultMessageListenerContainer 问题

转载 作者:行者123 更新时间:2023-12-01 05:24:42 24 4
gpt4 key购买 nike

我是 Spring Framework 的新手,我的问题如下:

我想实例化 DefaultMessageListenerContainer以编程方式,我使用的代码是:

DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(cf);
container.setDestination(Queue);
container.setMessageListener(Consumer);
container.setReceiveTimeout(-1);
container.setMaxConcurrentConsumers(15);
container.setConcurrentConsumers(10);
container.start();

为什么我必须手动关闭 DefaultMessageListenerContainer当我的项目取消部署时?如果我不手动关闭容器,消费者在我的队列中保持打开状态。

当我尝试手动关闭容器(通过调用 container.shutdown() )时,程序卡住并且项目无法继续。
如果我初始化 DefaultMessageListenerContainer不给 receiveTimeout正确执行关机程序。 setReceiveTimeout(-1)有什么问题吗? ?

最佳答案

你只需要手动关闭你的监听器,因为你已经以编程方式启动了它!如果您使用 ApplicationContext 从 xml 加载 Spring bean,那么关闭 App Context 将为您关闭所有 bean。

我发现控制 Spring 加载的 bean 的最简单方法是创建一个 servlet,它实现 HttpServlet 的 init() 和 destroy() 方法。 Init() 从我的 xml 文件(即称为 spring.xml 的主文件)加载我的 Spring 配置,并缓存 ApplicationContext 对象。然后 destory() 将在 ApplicationContext 上调用 close()。这将关闭/关闭所有 Spring bean(即您的 JMS 监听器将被停止)。

您以编程方式创建监听器的任何特殊原因?

关于spring - 关闭程序的 DefaultMessageListenerContainer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500161/

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