IBM MQ 侦听器服务 - onMessage 未被触发
IBM MQ listener service - onMessage not getting triggered
我想从 IBM MQ 读取消息并打印它们。
//我的主要class
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();
}
}
// 监听器 class
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!");
}
}
主程序 class 没有调用 onMessage 就终止了,即使队列中有消息也是如此。谁能帮我解决这个问题。
您需要保留您的程序 运行。当您到达 main 的末尾时 - 程序将退出,因此您的侦听器不会触发。
尝试将 new Scanner(System.in).nextLine();
放在方法的末尾以验证它是否有效。当然,您可能希望将此退出条件更改为更合适的内容(或实际关闭扫描器)。
我想从 IBM MQ 读取消息并打印它们。
//我的主要class
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();
}
}
// 监听器 class
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!");
}
}
主程序 class 没有调用 onMessage 就终止了,即使队列中有消息也是如此。谁能帮我解决这个问题。
您需要保留您的程序 运行。当您到达 main 的末尾时 - 程序将退出,因此您的侦听器不会触发。
尝试将 new Scanner(System.in).nextLine();
放在方法的末尾以验证它是否有效。当然,您可能希望将此退出条件更改为更合适的内容(或实际关闭扫描器)。