JMS发布者与订阅者采样器端到端响应时间映射问题求助
实现JMS端到端响应时间统计方案
核心思路
靠JMSCorrelationID关联发送和接收的消息,结合时间戳记录计算从发消息到收消息的总耗时,具体操作如下:
1. 配置JMS Publisher
- 发送消息前,用JMeter的
${__UUID()}生成唯一关联ID,存到变量${correlationId};同时用${__time(,)}记录发送时间,存到${sendTime}。 - 在JMS Publisher的「JMS Properties」中添加一条属性:
- 名称:
JMSCorrelationID - 值:
${correlationId}
确保发送的消息带上唯一标识。
- 名称:
2. 配置JMS Subscriber
- 在JMS Subscriber的「Selector」字段填写:
JMSCorrelationID = '${correlationId}',这样订阅器只会拉取和当前发送消息匹配的结果,避免收到队列中无关消息。 - 收到消息后,用
${__time(,)}记录接收时间${receiveTime},再通过${__longSum(${receiveTime}, -${sendTime}, responseTime)}计算耗时,${responseTime}就是你需要的端到端响应时间。
3. 关键注意事项
- 中间处理器转发消息时,必须保留原消息的JMSCorrelationID,如果处理器重发时丢失该属性,订阅器将无法匹配到对应消息。
- 给订阅器设置合理的超时时间,比如在「Timeout」字段填入合适的毫秒数,避免因无响应消息导致无限等待。
- 若不确定变量是否正确传递,可添加Debug Sampler查看
correlationId、sendTime等变量值是否正常生成。
4. 常见问题排查
- 订阅器收不到消息:检查Selector语法,字符串类型的关联ID必须加单引号;同时确认中间处理器是否同步转发了JMSCorrelationID。
- 时间计算异常:确保
sendTime和receiveTime均通过${__time(,)}获取毫秒级时间戳,避免使用非统一格式的时间值。
内容的提问来源于stack exchange,提问作者user4021949
相关产品推荐
相关产品推荐

