Jms Soap UI Groovy MQQueueConnection问题,队列中找不到消息时超时

Jms Soap UI Groovy MQQueueConnection问题,队列中找不到消息时超时,jms,soapui,Jms,Soapui,我们在Soap UI中有一个要求,我们必须从JMS队列中读取消息,我已设法通过MQQueueConnection连接到JMS队列并读取消息,但以下是我无法解决的问题: 1) 它总是在读取队列中的第一条消息,这在技术上是最早的消息,理想情况下它应该读取最新的消息,即最后一条消息(我们可以通过JMS Listner(Spring Boot)实现)。不确定如何在Soap UI中应用相同的消息,由于其他限制和依赖关系,我们必须使用Soap UI) 2) 在队列中没有消息的情况下,是否有可以应用的超时,现

我们在Soap UI中有一个要求,我们必须从JMS队列中读取消息,我已设法通过MQQueueConnection连接到JMS队列并读取消息,但以下是我无法解决的问题:

1) 它总是在读取队列中的第一条消息,这在技术上是最早的消息,理想情况下它应该读取最新的消息,即最后一条消息(我们可以通过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
  }

您可以在获取启动选项中使用等待:

    import com.ibm.mq.MQGetMessageOptions
    import com.ibm.mq.MQC

    MQGetMessageOptions gmo = new MQGetMessageOptions()
    gmo.options = MQC.MQGMO_WAIT
    gmo.waitInterval = 1800000
为什么要执行1000秒(=1000000毫秒)的receive()操作?那个呼叫会阻塞-所以也许你应该用receiver.receive(5000)将其更改为5秒左右