我正在使用JMeter测试IBM MQ,并且能够与队列建立连接并通过它发送请求。但是,我需要设置"JMS_IBM_LAST_MSG_IN_GROUP">属性为其中一条消息的true,但无法这样做。我使用下面的代码块,而发送请求或试图设置属性为真,但它仍然设置为默认值,即false,当我检查后端。你知道我错过了什么吗?
注意:正在另一个采样器中建立连接,并在此处使用该连接。这段代码可以很好地发送任何请求,只是该属性没有被设置为true。
import java.time.Instant
import com.ibm.msg.client.jms.JmsConstants
def sess = System.getProperties().get("Session")
def destination = System.getProperties().get("Destination")
def producer = sess.createProducer(destination)
def rnd = new Random(System.currentTimeMillis())
def payload = String.format('${groupid}|${sequencenumber}|rest of the payload|')
def msg = sess.createTextMessage(payload)
println('Payload --> ' + payload)
msg.setBooleanProperty(JmsConstants.JMS_IBM_LAST_MSG_IN_GROUP,true)
def start = Instant.now()
producer.send(msg)
def stop = Instant.now()
producer.close()
SampleResult.setResponseData(msg.toString())
SampleResult.setDataType( org.apache.jmeter.samplers.SampleResult.TEXT)
SampleResult.setLatency( stop.toEpochMilli() - start.toEpochMilli())
您的代码不包括设置组ID或序列号的任何内容。我假设我们已经显示了所有相关代码,在这种情况下,我认为您缺少以下代码:
msg.setStringProperty("JMSXGroupID", groupid);
msg.setIntProperty("JMSXGroupSeq", sequencenumber);
根据IBMMQ文档中的JMS_IBM_LAST_MSG_IN_GROUP章节
此属性在发布/订阅域中被忽略,并且在应用程序连接到服务集成总线时不相关。
一般来说,没有必要使用这个属性,你可以自己定制一个,例如:
msg.setBooleanProperty("X_CUSTOM_PROPERTY_LAST_MESSAGE",true)
对于消费者:
msg.getBooleanProperty("X_CUSTOM_PROPERTY_LAST_MESSAGE")
更多信息:使用JMeter进行IBM MQ测试-了解如何进行
分享,因为它可能会帮助别人。可以通过以下更改将属性设置为true,其余代码与原始问题
中提到的相同import com.ibm.msg.client.wmq.WMQConstants
def gid=String.format('${groupid}')
def msg = sess.createTextMessage()
println('Payload --> ' + payload)
msg.setStringProperty(WMQConstants.JMSX_GROUPID,gid)
msg.setBooleanProperty(WMQConstants.JMS_IBM_LAST_MSG_IN_GROUP,true)
msg.text=payload