【问题标题】:How to send message with RFH2 format?如何发送 RFH2 格式的消息?
【发布时间】:2020-07-25 00:29:15
【问题描述】:

问题

我需要使用 JMeter 在 IBM MQ 中注入消息。

格式应为 RFH2。我需要将Format 字段设置为空并更改标题的内容。

我应该使用哪种 JMeter 对象来做到这一点?

你能帮帮我吗?非常感谢。

更新 n°1

感谢@DmitriT 的回答,我可以在队列中发送消息了。

但是,标题内容似乎不是放在标题中而是放在消息之前。请在下面找到一个示例:

带有使用 MQ Visual Edit 发送的消息的服务器日志

标题

 2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2] 
 c.b.i.c.listeners.AbstractAgiListener    : Receive message on MQ with header : {someargs, 
 jms_destination=queue:///myqueue, someargs, Sender=mysender, someargs, jms_type=mcd://jms_byte,
 someargs}

留言

 <Document ...>...</Document>

带有通过 JMeter 发送的消息的服务器日志

标题

 2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2] 
 c.b.i.c.listeners.AbstractAgiListener    : Receive message on MQ with header : {someargs}

留言

 RFH ¨ÿÿÿþ        ¸ <mcd><Msd>jms_bytes</Msd></mcd> 8<jms><Dst>queue:///myqueue</Dst>
<Pri>0</Pri></jms>    <usr><Sender>mysender</Sender></usr><Document ...>...</Document>

你知道怎么解决吗?谢谢。

【问题讨论】:

    标签: jmeter ibm-mq mq-visual-edit


    【解决方案1】:

    你应该使用的“JMeter 对象”是JSR223 Sampler

    1. 下载com.ibm.mq.allclient库的相关版本(带依赖),放到JMeter Classpath
    2. 重启 JMeter 以获取库
    3. 将 JSR223 采样器添加到您的测试计划中
    4. 根据您的要求创建消息并将其发布到队列中。参考代码:

      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, 'DEV.APP.SVRCONN')
      mqProps.put(MQConstants.PORT_PROPERTY, 1414)
      mqProps.put(MQConstants.HOST_NAME_PROPERTY, '192.168.99.100')
      
      def qManager = 'QM1'
      def queueName = 'DEV.QUEUE.1'
      
      
      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()
      def rfh2 = new MQRFH2()
      rfh2.setEncoding(CMQC.MQENC_NATIVE)
      rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT)
      rfh2.setFormat(CMQC.MQFMT_STRING)
      rfh2.setNameValueCCSID(1208)
      rfh2.setFieldValue('your', 'data', 'here')
      rfh2.write(message)
      
      queue.put(message, pmo)
      queue.close()
      
      MQAsyncStatus asyncStatus = qMgr.getAsyncStatus()
      log.info('Successfully published: ' + asyncStatus.putSuccessCount + ' message(s)')
      

    参考资料:

    【讨论】:

    • 非常感谢您的回答!那么,根据您提供的代码,我需要创建producerconsumer 吗?或者只是创建消息并发布它直到得到服务器的响应就足够了?
    • 使用此代码,我可以在队列中发送消息。十分感谢。只有最后一件事。似乎 RFH2 内容放在消息之前而不是在标题中。我用细节更新了我的问题。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多