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)
您正在将消息 ID 从字节转换为字符串,然后在过滤器字符串中使用它。我更喜欢使用下面的内容,因为 MQ JMS 已经完成了从字节到字符串的所需转换。
String filter = "JMSCorrelationID='" + txtMsg.getJMSMessageID() + "'";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |