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

JMeter JMS Publisher:获取运行时JMSMessageId并设为JMSCorrelationID

解决JMeter中JMS Publisher设置JMSCorrelationID为JMSMessageId的问题

默认情况下,JMSMessageId是由消息服务器(此处为ActiveMQ Artemis)在接收消息后生成的,无法在消息发布前直接获取服务器生成的JMSMessageId。要实现将JMSCorrelationID设置为与JMSMessageId一致的需求,可通过以下两种方案实现:

方案一:自定义生成JMSMessageId(推荐)

ActiveMQ Artemis允许客户端自行指定JMSMessageId,只要客户端设置了该属性,服务器就不会自动生成。我们可以提前生成唯一ID,同时赋值给JMSMessageId和JMSCorrelationID:

  1. 添加JSR223前置处理器:在JMS Publisher采样器下添加「JSR223前置处理器」,选择Groovy语言。
  2. 生成唯一ID:在前置处理器的脚本框中写入生成符合Artemis格式ID的代码(或直接用UUID生成唯一值):
    // 生成符合Artemis JMSMessageId格式的唯一ID
    def host = InetAddress.localHost.hostName
    def timestamp = System.currentTimeMillis()
    def randomPort = new Random().nextInt(65535)
    def sequence = "1:1:1:1"
    def jmsMessageId = "ID:${host}-${randomPort}-${timestamp}-${UUID.randomUUID().toString().replace('-', '')}:${sequence}"
    
    // 将ID存入JMeter变量
    vars.put("CUSTOM_JMS_MESSAGE_ID", jmsMessageId)
    
  3. 配置JMS属性:在JMS Publisher采样器的「JMS Properties」区域添加两个属性:
    • 键:JMSMessageId,值:${CUSTOM_JMS_MESSAGE_ID}
    • 键:JMSCorrelationID,值:${CUSTOM_JMS_MESSAGE_ID}

发送消息后,JMSMessageId和JMSCorrelationID会使用你自定义的同一ID,满足需求。

方案二:先发送消息提取ID再复用(仅适用于后续消息关联)

如果必须使用服务器生成的JMSMessageId,只能先发送一条消息,提取返回的JMSMessageId后,再将其作为后续消息的JMSCorrelationID:

  1. 发送第一条消息:用JMS Publisher发送消息,在「查看结果树」中确认返回的JMSMessageId。
  2. 添加正则表达式提取器:在该采样器下添加「正则表达式提取器」,设置:
    • 引用名称:SERVER_JMS_MESSAGE_ID
    • 正则表达式:JMSMessageId\s+ID:(.+)
    • 模板:$1$
  3. 后续消息关联:在需要设置JMSCorrelationID的JMS Publisher采样器中,添加JMS属性:
    • 键:JMSCorrelationID,值:ID:${SERVER_JMS_MESSAGE_ID}

这种方式无法在同一条消息发布前获取服务器生成的JMSMessageId,仅适用于跨消息的关联场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:48:17