我有以下代码来发送请求并从IBM MQ接收响应。我知道代码是特定于IBM实现的,但我试图得到一些结果。稍后我将对代码进行更改以使其更通用。
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName("xx.xxx.xx.xxx");
cf.setPort(xxxx);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager("Q_MANAGER");
cf.setChannel("CHANNEL");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("queue:///REQ_Q");
MQQueue respQueue = (MQQueue) session.createQueue("queue:///RESP_Q");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
// set message properties
TextMessage message = (TextMessage) session.createTextMessage("message to send");
message.setJMSReplyTo(respQueue);
// Start the connection
connection.start();
sender.send(message);
session.commit();
String selecter = "JMSCorrelationID = '"+message.getJMSCorrelationID()+"'";
MQQueueReceiver receiver = (MQQueueReceiver)session.createReceiver(respQueue, selecter);
Message messageText;
messageText = receiver.receive(5000);
邮件已成功发送。但我得到null作为响应,实际上应该有一些响应。我错过了什么?
答案 0 :(得分:2)
您如何知道其他应用程序向您发送了回复?你检查了响应队列吗?
String selecter = "JMSCorrelationID = '"+message.getJMSCorrelationID()+"'";
世界上到底是什么?其他应用程序团队是否告诉您响应消息的CorrelID将具有原始消息的MessageID?如果是这样,您使用的是错误的值。
因此,您需要使用您发送给其他应用程序的消息中的MessageID值。即。
String selecter = "JMSCorrelationID = '"+message.getJMSMessageID()+"'";