如何使用JMeter在IBM MQ中检索正确的消息队列响应

5vf7fwbs  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(306)

我目前正在JMeter中使用JSR 223采样器测试IBM MQ请求。这里我的场景是,我需要将请求发送到一个队列名(Queue.In),并从另一个队列名(Queue.out)中检索响应。现在我可以从Queue.out中检索响应,但我不确定它是否提取了我发送的正确消息,或者其他一些消息请求已经在队列中(FIFO模型)。
也许,我知道如何修改我下面的代码,将消息ID/相关ID发送到Queue.IN,并从Queue.out中检索相同的消息ID/相关ID,或者请建议是否有更好的方法从Queue. out中提取相同的消息。

import com.ibm.mq.MQAsyncStatus
import com.ibm.mq.MQMessage
import com.ibm.mq.MQPutMessageOptions
import com.ibm.mq.MQQueueManager
import com.ibm.mq.constants.CMQC
import com.ibm.mq.constants.MQConstants
import com.ibm.mq.headers.MQRFH2

def mqProps = new Hashtable<String, Object>()
mqProps.put(MQConstants.CHANNEL_PROPERTY, 'xxxx')
mqProps.put(MQConstants.PORT_PROPERTY, 1414)
mqProps.put(MQConstants.HOST_NAME_PROPERTY, 'xxx')

def hostName = "${p_hostName}"
def hostPort = ${p_hostPort}
def channelName = "${p_channelName}"
def qManager = "${p_queueManagerName}"
def queueName = "${p_queueName}"

def qMgr = new MQQueueManager(qManager, mqProps)
def openOptions = MQConstants.MQOO_OUTPUT | MQConstants.MQOO_INPUT_AS_Q_DEF
def queue = qMgr.accessQueue(queueName, openOptions)

def pmo = new MQPutMessageOptions()
pmo.options = MQConstants.MQPMO_ASYNC_RESPONSE
def message = new MQMessage()
message.format = CMQC.MQFMT_RF_HEADER_2
def rfh2 = new MQRFH2()
rfh2.setEncoding(CMQC.MQENC_NATIVE)
rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT)
rfh2.setFormat(CMQC.MQFMT_STRING)
rfh2.setNameValueCCSID(1208)
rfh2.setFieldValue('usr', '${Var1}', '${Var2}')

rfh2.write(message)

message.writeString('''${request_payload}''')

queue.put(message, pmo)
queue.close()

MQAsyncStatus asyncStatus = qMgr.getAsyncStatus()
log.info('Successfully published: ' + asyncStatus.putSuccessCount + ' message(s)')
fv2wmkja

fv2wmkja1#

您可以将相关ID存储到JMeter Variables中,如下所示:

vars.putObject('correlationId', message.correlationId)

其中vars代表JMeterVariables类示例,有关更多详细信息,请参见Top 8 JMeter Java Classes You Should Be Using with Groovy文章。
那么为了检索特定的消息,您需要执行如下操作:

def queueOptions = new MQGetMessageOptions()
queueOptions.options = CMQC.MQGMO_WAIT | CMQC.MQGMO_CONVERT
queueOptions.matchOptions = CMQC.MQMO_MATCH_CORREL_ID
def response = new MQMessage()
response.correlationId = vars.getObject('correlationId')

queue.get(response, queueOptions)

更多信息:Getting a particular message

相关问题