You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter JSR223 Sampler连接MQ成功,如何发布多组数据SOAP消息?

使用JMeter的JSR223 Sampler向MQ发布带动态字段的SOAP消息示例

Groovy示例代码(推荐,性能优于BeanShell)

假设你已经通过JSR223 Sampler完成了MQ连接初始化(如获得QueueConnection、QueueSession、QueueSender实例),以下是发布动态SOAP消息的代码:

// 1. 定义SOAP消息模板,使用JMeter变量占位符
def soapTemplate = '''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tstprj="http://my.host.local/" xmlns:buy="http://my.host.local/">
   <soapenv:Header/>
   <soapenv:Body>
      <buy:shopping>
         <product>${product}</product>
         <company>XYZ</company>
         <Quantity>${quantity}</Quantity>
         <size>${size}</size>
         <code>${code}</code>
      </buy:shopping>
   </soapenv:Body>
</soapenv:Envelope>'''

// 2. 替换模板中的动态字段(可直接使用JMeter变量,或自定义默认值)
def finalMessage = soapTemplate.replace('${product}', vars.get('product') ?: 'soaps')
                               .replace('${quantity}', vars.get('quantity') ?: '1')
                               .replace('${size}', vars.get('size') ?: 'xl')
                               .replace('${code}', vars.get('code') ?: 'sop:1234')

// 3. 将消息转为TextMessage
TextMessage message = session.createTextMessage(finalMessage)

// 4. 发送消息到MQ队列(确保session、sender是你已初始化的有效实例)
sender.send(message)

// 可选:打印日志用于调试
log.info("已发送MQ消息:" + finalMessage)

关键说明

  • 修正了原示例中<code>标签的闭合错误(原示例误用</content>),并补充了buy命名空间声明,避免SOAP解析报错
  • 动态字段可通过JMeter变量(如${product})从CSV Data Set Config、User Defined Variables等元件中读取,实现多数据集循环发送
  • 若尚未完成MQ连接初始化,可参考以下基础逻辑:
    QueueConnectionFactory factory = new com.ibm.mq.jms.MQConnectionFactory()
    factory.setHostName("你的MQ主机地址")
    factory.setPort(1414)
    factory.setQueueManager("队列管理器名称")
    factory.setChannel("通道名称")
    factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP)
    
    QueueConnection conn = factory.createConnection("用户名", "密码")
    conn.start()
    QueueSession session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE)
    Queue queue = session.createQueue("目标队列名称")
    QueueSender sender = session.createSender(queue)
    

BeanShell示例代码

// 1. 定义SOAP消息模板
String soapTemplate = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tstprj=\"http://my.host.local/\" xmlns:buy=\"http://my.host.local/\">\n" +
                      "   <soapenv:Header/>\n" +
                      "   <soapenv:Body>\n" +
                      "      <buy:shopping>\n" +
                      "         <product>${product}</product>\n" +
                      "         <company>XYZ</company>\n" +
                      "         <Quantity>${quantity}</Quantity>\n" +
                      "         <size>${size}</size>\n" +
                      "         <code>${code}</code>\n" +
                      "      </buy:shopping>\n" +
                      "   </soapenv:Body>\n" +
                      "</soapenv:Envelope>";

// 2. 替换动态字段
String product = vars.get("product") != null ? vars.get("product") : "soaps";
String quantity = vars.get("quantity") != null ? vars.get("quantity") : "1";
String size = vars.get("size") != null ? vars.get("size") : "xl";
String code = vars.get("code") != null ? vars.get("code") : "sop:1234";

String finalMessage = soapTemplate.replace("${product}", product)
                                 .replace("${quantity}", quantity)
                                 .replace("${size}", size)
                                 .replace("${code}", code);

// 3. 创建并发送消息
TextMessage message = session.createTextMessage(finalMessage);
sender.send(message);

// 调试日志
log.info("已发送MQ消息:" + finalMessage);

内容的提问来源于stack exchange,提问作者POTL12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:20:38