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

我们在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
  }
sunyinglu 回答:Soap UI Groovy MQQueueConnection问题,在队列中未找到消息时超时

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

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

    MQGetMessageOptions gmo = new MQGetMessageOptions()
    gmo.options = MQC.MQGMO_WAIT
    gmo.waitInterval = 1800000
本文链接:https://www.f2er.com/3073728.html

大家都在问