我们在Soap UI中有一个要求,我们必须从JMS Queue中读取消息,我设法通过MqqueueConnection建立到JMS Queue的连接并读取消息,但是下面是我无法解决的问题:
1)它总是读取队列中的第一条消息,这在技术上来说是最旧的消息,理想情况下,它应该读取最新的消息,即last(我们可以通过JMS Listner(Spring Boot)实现),不确定如何应用在Soap UI中相同,由于其他限制和依赖性,我们必须使用Soap UI)???
2)如果队列中没有消息,是否有可以应用的超时,到现在为止它正在进行无限搜索并挂起Soap UI?
我的Groovy:
import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSConnectionHolder
import com.eviware.soapui.impl.wsdl.submit.transports.jms.util.HermesUtils
import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint
import hermes.Hermes
import javax.jms.*
import javax.jms.JMSException;
import javax.jms.Session;
import com.ibm.jms.JMSMessage;
import com.ibm.jms.JMSTextMessage;
import com.ibm.mq.jms.JMSC;
import com.ibm.mq.jms.Mqqueue;
import com.ibm.mq.jms.MqqueueConnection;
import com.ibm.mq.jms.MqqueueConnectionFactory;
import com.ibm.mq.jms.MqqueueReceiver;
import com.ibm.mq.jms.MqqueueSender;
import com.ibm.mq.jms.MqqueueSession;
context.testCase.testSteps["Properties"].setPropertyValue("receivedMessage","")
try {
MqqueueConnectionFactory cf = new MqqueueConnectionFactory();
// Config
cf.setHostName("agdevesb01");
cf.setPort(14141);
cf.setTransportType(1);
cf.setQueueManager("AGDEV1T1");
cf.setChannel("CLIENTS.CARRIER");
MqqueueConnection connection = (MqqueueConnection) cf.createQueueConnection();
MqqueueSession session = (MqqueueSession) connection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
//Mqqueue queue = (Mqqueue) session.createQueue("queue:///Q1");
Mqqueue queue = (Mqqueue) session.createQueue("queue:///QUEUE_NAME")
MqqueueSender sender = (MqqueueSender) session.createSender(queue);
MqqueueReceiver receiver = (MqqueueReceiver) session.createReceiver(queue);
// long uniqueNumber = System.currentTimeMillis() % 1000;
// JMSTextMessage message = (JMSTextMessage) session.createTextMessage("SimplePTP "+ uniqueNumber);
// Start the connection
connection.start();
// sender.send(message);
// System.out.println("Sent message:\\n" + message);
JMSMessage receivedMessage = (JMSMessage) receiver.receive(1000000);
//System.out.println("\\nReceived message:\\n" + receivedMessage);
log.info "Received message: " + receivedMessage
context.testCase.testSteps["Properties"].setPropertyValue("receivedMessage",receivedMessage.toString())
sender.close();
receiver.close();
session.close();
connection.close();
//System.out.println("\\nSUCCESS\\n");
log.info "SUCCESS"
}
catch (JMSException jmsex) {
//System.out.println(jmsex);
log.info jmsex
//System.out.println("\\nFAILURE\\n");
}
catch (Exception ex) {
// System.out.println(ex);
// System.out.println("\\nFAILURE\\n");
log.info ex
}