java - IBM MQ 监听器服务 - onMessage 未触发

标签 java jms ibm-mq

我想从 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 的情况下终止。谁能帮我解决这个问题。

最佳答案

您需要保持程序运行。当您到达 main 末尾时 - 程序将退出,因此您的监听器不会触发。

尝试将 new Scanner(System.in).nextLine(); 放在方法末尾以验证其是否有效。当然,您可能想将此退出条件更改为更合适的条件(或实际关闭扫描仪)。

关于java - IBM MQ 监听器服务 - onMessage 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50654451/

相关文章:

java - 如何在字节缓冲区中表示目标列表

java - 定义包含 main() 方法的同一类的实例变量时出现 StackOverflowError

java - 在Java中打印包含特定模式的字符串

java - 通过 HornetQ 使用 STOMP 同步消息

java - 消息监听器中的 JMS 连接池

java - jms 消息不移动 websphere 中的队列

java - Android中的循环线程启动

java - 多线程 JMS 客户端 ActiveMQ

python - 无法使用 pymqi 连接到 IBM MQ

c - Linux 操作系统中的 MQ 连接