Служба прослушивания IBM MQ - onMessage не запускается - PullRequest
0 голосов
/ 02 июня 2018

Я хочу прочитать сообщения из IBM MQ и просто распечатать их.

// мой основной класс

import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;

import com.ibm.mq.jms.MQQueue;
import com.ibm.mq.jms.MQQueueConnection;
import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.mq.jms.MQQueueSession;
import com.ibm.msg.client.wmq.WMQConstants;

public class QueueConnector {
    public static void main(String[] args) throws JMSException {
        MQQueueConnectionFactory qcf = new MQQueueConnectionFactory();
        MQQueueConnection qc;
        Queue queue;
        MQQueueSession queueSession;
        MessageConsumer consumer;
        qcf.setHostName ("XYZ");
        qcf.setPort (Integer.parseInt("abc"));
        qcf.setQueueManager ("ABC");
        qcf.setChannel ("IJK");
        qcf.setTransportType (WMQConstants.WMQ_CM_CLIENT);
        qc = (MQQueueConnection) qcf.createQueueConnection ();
        queue = new MQQueue("QUEUE_NAME");
        queueSession = (MQQueueSession) qc.createQueueSession (false,Session.AUTO_ACKNOWLEDGE);
        consumer = queueSession.createConsumer(queue);
        Listener listener = new Listener();
        consumer.setMessageListener(listener);
        qc.start();
    }
}

// класс слушателя

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class Listener implements MessageListener {

    @Override
    public void onMessage(Message message) {
        // TODO Auto-generated method stub
        try {
            System.out.println(((TextMessage)message).getText());
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("From Listener!");

    }
}

Основной класс завершается без вызова onMessage, даже если в очереди есть сообщения.Может ли кто-нибудь помочь мне с этим.

1 Ответ

0 голосов
/ 03 июня 2018

Вы должны держать свою программу работающей.Когда вы достигнете конца main - программа закроется, и, следовательно, ваш слушатель не сработает.

Попробуйте поместить new Scanner(System.in).nextLine(); в конце вашего метода, чтобы убедиться, что он работает.Конечно, вы можете захотеть изменить это условие выхода на что-то более подходящее (или фактически закрыть сканер).

...