我的代码在不同的地方有两个不同的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)
的位置。我真的不觉得这是一种干净的方法。
还有其他/更好的方法吗?