MQQueueConnection.start不会持续侦听新消息

时间:2014-10-30 08:12:57

标签: java jms mq

您好我正在尝试为MQ队列设置一个侦听器,它需要持续侦听队列并通过onMessage函数传递任何新消息。程序不应该退出。 以下是我的程序片段。 在MQQueueConnection.start上,我在onMessage函数中获得了一个命中,但是在消耗了来自MQ的1条消息之后,程序停止了。我希望程序永远运行,并通过onMessage函数在队列中传递新消息。我有什么想法吗? 使用spring jms类它可以根据需要工作,虽然我不想在这里使用spring。

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(); 
   }
}

1 个答案:

答案 0 :(得分:1)

connection.start()启动一个新线程,但该线程可能是daemon线程,因此它在程序结束时结束。你很幸运,你甚至收到一条消息。

例如在你的主音乐结尾尝试一个Thread.sleep(60000),然后听众将在空中停留一分钟,你可能会收到更多的消息。