Мой код имеет две разные очереди 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)
. Я действительно не чувствую, что это чистый способ сделать это.
Есть ли другие / лучшие способы?