JMeter JMS Publisher:获取标头中的 JMSMessageId(在运行时生成),并在发布之前将其用作另一个 JMS 属性的值

问题描述 投票:0回答:2

在 JMeter 中,我有一个 JMS Publisher 采样器,配置为将消息发送到远程队列。 消息成功发布到在 ActiveMQ Artemis 服务器上运行的远程队列,并且在查看结果树侦听器(请求 -> 请求标头)中,我可以看到一些 JMS 属性(我在 JMS Publisher 采样器的 JMS 属性部分中设置) 。 但是,我看到的其中一些标头属性从未设置过(它们由 JMS Publisher 采样器隐式设置):JMSMessageId、JMSTimestamp、JMSType、JMSExpiration。

JMSMessageId 看起来像这样:

JMSMessageId     ID:ip-100-100-100-100.eu-west-1.compute.internal-44444-1111111111111-2:2:2:1:1

我知道这个 JMSMessageId 标头是在运行时生成的,其生成规则取决于 JMS 供应商。它可能仅对于消息服务器的当前安装是唯一的,或者它可能是普遍唯一的。

我想知道是否可以在生成 JMSMessageId 属性后获取该属性的值,并在发布消息之前将其用作另一个名为 JMSCorrelationID 的 JSM 属性的值。

jmeter jms activemq-artemis mq
2个回答
0
投票

绝大多数情况下,messageId 和correlationId 没有关联。

查看文档

使用相关ID

关联ID用于关联 当应用程序调用一个请求消息时,响应消息 请求-响应操作。借助 WebSphere® MQ 和 WebSphere MQ JMS, 您可以使用关联 ID 或消息 ID 进行关联。在 大多数情况下,调用者让队列管理器选择一个消息 ID 并 期望应用程序将此消息 ID 复制到相关性中 响应消息的ID。但还有其他可能性。 A 调用者可以在相关 ID 中指定特定值并期望 将此值复制到响应相关 ID 中。呼叫者,召集者 可能还要求请求消息的消息 ID 复制到响应消息的消息 ID 中。

因此,您可以以某种方式预先生成并自行设置,而不是尝试获取 MQ 系统或库生成的值。在这种情况下,您可以使用 While Controller 等待消息在队列中可用,并使用 Transaction Controller 来测量端到端消息处理时间


0
投票

为了获取提供者为消息生成的 JMSMessageID,您需要调用

getJMSMessageID()
。但是,为了将此值用于消息上的另一个标头或属性,您必须在发送消息之前调用此方法。问题在于,提供者为 JMSMessageID 分配的值在发送消息之后才可用。 getJMSMessageID()JavaDoc 指出:

send

publish

 方法返回时,它包含提供者分配的值。
因此,您不能将 JMSMessageID 用于同一消息上的任何其他标头或属性值。

© www.soinside.com 2019 - 2024. All rights reserved.