gpt4 book ai didi

java - 导致ActiveMQ应用程序无提示退出的可能原因有哪些?

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:29 24 4
gpt4 key购买 nike

我制作了一个简单的ActiveMQ应用程序。

它监听队列。如果有消息,则打印出 dataId

这是代码:

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class MQ implements MessageListener {
private Connection connection = null;
private Session session = null;
private Destination destination = null;

private void errorOnConnection(JMSException e) {
System.out.println("MQ is having problems. Exception::"+ e);
}

private void init() throws JMSException {
String BROKER_URL = "failover:(tcp://myQueue001:61616,tcp://myQueue002:61616)?randomize=false";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);

connection = connectionFactory.createConnection("user", "password");

connection.setExceptionListener(
new ExceptionListener() {
@Override public void onException(JMSException e) {
errorOnConnection(e);
}
});

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

destination = session.createQueue("myQueue");


MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
}

public boolean start() {
try {
if(connection==null )
init();
connection.start();
} catch (Exception e) {
System.out.println("MQListener cannot be started, exception: " + e);
}
return true;

}

@Override
public void onMessage(Message msg) {
try {
if(msg instanceof MapMessage){
MapMessage m = (MapMessage)msg;
int dataId = m.getIntProperty("dataId");
System.out.println(dataId);
}
} catch (JMSException e) {
System.out.println("Got an exception: " + e);
}


}

public static void main(String[] args) {
MQ mq = new MQ();
mq.start();

}

}
<小时/>

它工作得很好并且完成了它应该完成的任务。

但是,问题是它只能运行几天。几天后,它就默默退出,没有任何异常或错误。

我正在收听的队列来自第 3 方。从那里的一个人那里,队列有时会被关闭、重新启动或中断。

但我认为即使发生这种情况,默认的 ActiveMQ 设置也会通过持续重新连接来处理它,对吗? (根据http://activemq.apache.org/cms/configuring.html)

还有其他可能的原因导致我的代码静默退出吗?

最佳答案

取决于您的版本。因为您自己没有做任何事情来保持应用程序运行,而是依赖 ActiveMQ 代码来保持至少一个非守护线程运行。在某些 ActiveMQ 版本中,客户端并不总是这样做,因此您的应用程序可以在发生故障转移时保持安静。最好的选择是切换到 v5.8.0,我相信它对此有一些修复。

您可以在 main 中添加一些轮询代码,以从控制台读取某些内容或不读取某些内容,以确保客户端保持运行状态,直到您确定希望它关闭为止。

关于java - 导致ActiveMQ应用程序无提示退出的可能原因有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17145705/

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