Я сделал простую заявку ActiveMQ
.Каковы возможные причины, по которым приложение 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();
}
}
Он отлично работает и делает то, что он предназначен для выполнения.
Однако, проблема в том, что он может работать только в течение нескольких дней. Через несколько дней он просто прекращает работу без каких-либо исключений или ошибок.
Очередь, которую я слушаю, относится к третьей стороне. От парня там очередь иногда будет закрыта или перезапущена или прервана.
Но я думаю, что даже если это произойдет, настройки ActiveMQ по умолчанию будут обрабатывать его, последовательно подключаясь к нему, не так ли? (в соответствии с http://activemq.apache.org/cms/configuring.html))
Итак, возможны ли другие возможные причины, приводящие мой код к молчанию?
спасибо. Чтобы сохранить его, у вас есть лучший способ вместо чтения с консоли? как насчет Thread.sleep в главном или что-то в этом роде? –
Моя текущая версия - 5.2.0 –
Сделайте все, что работает для вашего прецедента. Вы можете использовать отдельный сеанс и потребитель для выполнения блокирующего приема по теме управления или что-то еще. В конце концов, вам нужно выбрать что-то, что сработает для вас. –