IBM MQ发送和接收消息

时间:2016-01-04 12:21:58

标签: java jms message-queue ibm-mq

我有以下代码来发送请求并从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作为响应,实际上应该有一些响应。我错过了什么?

1 个答案:

答案 0 :(得分:2)

您如何知道其他应用程序向您发送了回复?你检查了响应队列吗?

String selecter = "JMSCorrelationID = '"+message.getJMSCorrelationID()+"'";

世界上到底是什么?其他应用程序团队是否告诉您响应消息的CorrelID将具有原始消息的MessageID?如果是这样,您使用的是错误的值。

因此,您需要使用您发送给其他应用程序的消息中的MessageID值。即。

String selecter = "JMSCorrelationID = '"+message.getJMSMessageID()+"'";