gpt4 book ai didi

java - 如何让 JMS 消息监听器无限期地监听

转载 作者:行者123 更新时间:2023-12-01 21:54:13 25 4
gpt4 key购买 nike

我的代码在不同位置有两个不同的 JMS 队列。它从一个队列中获取一条消息,进行一些处理,构建一条新消息,然后将其放入另一个队列中,以便由不同的进程获取。尽管它有效,但我想要的是监听器连续监听,以便每当将新消息放入第一个队列时就会拾取它。我的监听器的主要方法:

public static void main(String[] args) throws JMSException {
parseArgs(args);
AMessageListener aMessageListener = new AMessageListener();
try {
aMessageListener.startListener();
Thread.sleep(100000);
aMessageListener.destroy();
} catch (JMSException e) {
// TODO handle exception
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
aMessageListener.destroy();
}

以及我用来启动监听器的代码:

public void startListener() throws JMSException{
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVE_MQ_FACTORY_URL);
conn = connectionFactory.createConnection(jmsBrokerUser, jmsBrokerPass);
conn.start();

Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("some.in.queue");
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(this);
}

我一直在网上寻找最佳实践,但几乎找不到。获得我想要的一个明显的方法是将 while(true) 放在我有 Thread.sleep(100000) 的位置。我真的不觉得这是一种干净的做法。

有什么不同/更好的方法吗?

最佳答案

由于这显然是一个简单的命令行应用程序,因此您可以使用System.in.read(),以便当用户按 Enter 键时程序退出。或者,如果您想防止意外关闭,您可以让用户必须输入特定的关键字,例如“退出”或“退出”等。

除此之外,我认为使用 while(true) 没有任何问题,尽管我将其与 Thread.sleep() 结合使用,例如:

while(true) {
Thread.sleep(100000);
}

另外,我建议您将 aMessageListener.destroy(); 放在 finally block 中,而不是让代码重复两次。

关于java - 如何让 JMS 消息监听器无限期地监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58750018/

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