您好,我正在尝试为MQ队列设置一个侦听器,该侦听器需要连续侦听队列并通过onMessage函数传递任何新消息。程序不应该退出。 以下是我的程序片段。 在MQQueueConnection.start上,我在onMessage函数中得到了一个命中,但是从MQ中消耗1个消息后,程序停止。我希望程序永远运行,并通过onMessage函数在队列中传递新消息。任何想法我做错了什么? 春天jms类它按要求工作,但我不想在这里使用春天。MQQueueConnection.start不会持续侦听新邮件
public class MyListener implements MessageListener {
@Override
public void onMessage(Message message)
{
try
{
handleMessage(message,session);
}
catch (Exception exx)
{
onHandleMessageException(message, exx);
}
}
}
public class TestListener
{
public static void main(String[] args) {
MyListener myListener = new MyListener();
MQQueueConnectionFactory connFactory = new MQQueueConnectionFactory();
//MyApplicationContext - custom class for loading MQ params
MyApplicationContext obj=MyApplicationContext.getInstance();
connFactory.setHostName(obj.getHost());
connFactory.setPort(obj.getPort());
connFactory.setQueueManager(obj.getQueueManagerName());
connFactory.setChannel(obj.getChannel());
connFactory.setTransportType(obj.getTransportType());
MQQueueConnection connection=(MQQueueConnection) connFactory.createQueueConnection(obj.getMqUser(), obj.getMqPWD()) ;
MQQueueSession session=(MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("TEST.QUEUE");
MQQueueReceiver qReceiver = (MQQueueReceiver) session.createReceiver(queue);
qReceiver.setMessageListener(myListener);
// expect to start a new thread, which will constantly listen for new messages
//on the queue and deliver it in onMessage function.
//instead after receiving one message in onMessage, program exits
connection.start();
}
}
缺少那里util.Timer,执行器,....在合理的时期,创建可管理,但无止境的循环,从主的每个代码行应该在构造函数 – mKorbel 2014-10-30 08:15:50
您是说,要执行整个代码在main函数重复使用计时器?有没有更好的方法来达到要求? – N3Xg3N 2014-10-30 08:31:18
如果您的主线程除了启动消息监听器之外没有其他任何操作,那么主线程本身可以调用Queue.Receive()方法来接收消息。 – Shashi 2014-10-30 10:31:34