无法使用JMS应用程序从IBM MQ获得响应

Dev*_*noy 8 java spring-jms ibm-mq

我们以请求/回复方式使用IBM MQ与第三方进行通信.我们发送请求,他们给我们回复.目前我们都有一个简单的基于Java的本机IBM MQ应用程序.我们计划使用spring jms重写代码.但是,当使用spring jms时,我们没有在给定时间内得到任何响应.我们使用JMSTemplate发送或接收消息.我正在分享我的代码片段.我在这里做错了吗?我应该在这里设置任何其他属性吗?

  // Request Part (we are sending request)

  String request // this is the request string
  byte[] reqData = request.getBytes(); // converting it into byte array to send

  TextMessage txtMsg = session.createTextMessage(String.valueOf(reqData));

  Destination replyToQName = jmsTemplate.getDestinationResolver().resolveDestinationName(session, responseQueueName, false);

  txtMsg.setJMSReplyTo(replyToQName);

  Destination requestQ = jmsTemplate.getDestinationResolver().resolveDestinationName(session, requestQueueName, false);

  ((JmsDestination) requestQ).setBooleanProperty( WMQConstants.WMQ_MQMD_WRITE_ENABLED, true );

  ((MQQueue) requestQ).setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ); // setting this because third party application is native websphere mq java application 

  jmsTemplate.convertAndSend(requestQ, txtMsg);

  // saved msgId of request for late use
  String messageId =  txtMsg.getJMSMessageID();


  // Response fetching part

  Destination responseQ = jmsTemplate.getDestinationResolver().resolveDestinationName(session, responseQueueName, false);

  ((JmsDestination) responseQ).setBooleanProperty(WMQConstants.WMQ_MQMD_READ_ENABLED, true);

  ((JmsDestination) responseQ).setObjectProperty( WMQConstants.JMS_IBM_MQMD_CORRELID, msgIdText);

  jmsTemplate.setReceiveTimeout(30000L);

  String filter = "JMSCorrelationID='" + messageId + "'"; // to match request message's messageId with response message's correlationId

  TextMessage respMsg = (TextMessage) jmsTemplate.receiveSelected(responseQ, filter);
Run Code Online (Sandbox Code Playgroud)

下面是我的connectionFactory代码:

 MQConnectionFactory factory = new MQQueueConnectionFactory();
 factory.setHostName("hostname");
 factory.setPort(1420);
 factory.setQueueManager("QM1");
 factory.setChannel("TEST.CHANNEL");
 factory.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
Run Code Online (Sandbox Code Playgroud)

Sha*_*shi 0

您正在将消息 ID 从字节转换为字符串,然后在过滤器字符串中使用它。我更喜欢使用下面的内容,因为 MQ JMS 已经完成了从字节到字符串的所需转换。

String filter = "JMSCorrelationID='" + txtMsg.getJMSMessageID()  + "'";
Run Code Online (Sandbox Code Playgroud)