gpt4 book ai didi

java - 带有 ActiveMQ 和 Spring 的 JMS 独立消费者

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:37 24 4
gpt4 key购买 nike

过去,我将我的 JMS 消费者应用程序部署为在 Tomcat(Windows 框)下部署的 Spring 网络应用程序。然后,这些消费者将与我的其他 Web 应用程序一起在同一个 Tomcat 实例下运行。然而,随着我使用的消费者数量的增加,我意识到这正在变成一场维护噩梦。

我的解决方案是将这些网络应用程序转换为以 jar 形式部署的“主要方法”独立应用程序。事实上,我能够成功地将它们全部打包在一起,以尝试重用尽可能多的资源(DAO、依赖项等)。

这是我的主要方法:

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

try {
FooListener fooListener = (FooListener) context.getBean("fooListener");

fooListener.start();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}

try {
BarListener barListener = (BarListener) context.getBean("barListener");

barListener.start();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}

我的问题:

  1. 我是否需要做任何特殊的事情来关闭我的主方法应用程序中的 JMS 连接,或者它们会在应用程序终止时正常关闭吗?
  2. 对于使用 tomcat 还是作为独立应用程序部署 jms 消费者,是否有人有任何个人偏好或其他方面的偏好?

编辑:

更多信息:FooListener 和 BarListener 扩展了以下抽象类。它们从 applicationContext.xml 文件中相应的 bean 继承它们的值,并且它们都覆盖 onMessage() 方法以异步使用消息。

public abstract class TextMessageListener implements MessageListener {

protected ConnectionFactory connectionFactory;

protected String queueName;

protected String selectors;

public void start() throws JMSException {
Connection connection = connectionFactory.createConnection();

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

MessageConsumer consumer = session.createConsumer(session.createQueue(queueName), selectors);

consumer.setMessageListener(this);

connection.start();
}

public abstract void onMessage(Message message);
}

最佳答案

您必须以这种方式为您的应用程序上下文注册一个关闭 Hook :

context.registerShutdownHook();

这将确保当 jvm 关闭时,上下文也会正常关闭。

我个人的偏好始终是将其部署到容器中——即使是像这样的独立应用程序,这是因为以下原因:

  • 管理更容易 - 部署/取消部署应用程序 war ,启动/停止容器运行时。
  • 如果您需要构建任何类型的监控 - 正在使用多少消息,使用此设置会更容易,您可以只添加显示相关信息的网页,而不是将 jmx 与独立应用程序一起使用。

此外,为什么要显式调用 listener.start(),Spring 容器还是会自动执行此操作?

关于java - 带有 ActiveMQ 和 Spring 的 JMS 独立消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952232/

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