如何通过 IBM MQ 使用 JMS 点对点消息传递模型来测量 SuT 的响应(处理)时间?
Posted
技术标签:
【中文标题】如何通过 IBM MQ 使用 JMS 点对点消息传递模型来测量 SuT 的响应(处理)时间?【英文标题】:How can I measure the response (processing) times of a SuT using JMS Point-to-Point messaging model through IBM MQ? 【发布时间】:2021-12-13 05:26:04 【问题描述】:我有一个设置了 2 个队列的远程 IBM MQ 实例。在它们后面是一个被测系统,它总是拾取放在 INBOUND.QUEUE 上的消息”进行一些处理并将响应消息放在“OUTBOUND.QUEUE”上。
我想测试这个 SuT 的响应时间。为了实现这一点,我需要设置这个场景:
JMeter 将一些 ID 为 1 的消息发送到名为“INBOUND.QUEUE”的队列 被测系统从“INBOUND.QUEUE”获取消息,进行一些处理并将响应放在“OUTBOUND.QUEUE”上 JMeter 检查并断言已在 X 秒内收到对名为“OUTBOUND.QUEUE”的队列中 ID1 的消息的响应 在聚合报告侦听器中查看响应时间结果在 JMeter 中,我的设置与 article 中描述的设置非常相似,如果我的理解正确,则使用带有 groovy 代码的 JSR223 测试元素与 IBM MQ 队列交互 - 通过 JMS。与文章的不同之处在于,为了使用出站队列中的消息,我有另一个 setUp Thread Group 为“OUTBOUND.QUEUE”设置另一个连接,我从中使用消息,另一个 tearDown Thread Group 关闭此连接最后。
在高层次上,我的设置如下所示:
到目前为止它工作正常,但它盲目地消费消息,我需要确保我正在阅读(消费)每个初始消息的响应延续,以便我可以计算每个完整请求的 SuT 的响应或处理时间-响应流。 我知道我可以为此目的使用JMS Correlation ID,但我不知道如何。
我可以在消息创建和消费时使用什么方法来获取此 Correlation ID?
我是否需要一些数据结构来在消息创建时放置所有相关 ID,以便我可以设置一个条件,如 IF msg.getStringProperty("JMS_CorreationID") 是生成的 ID 列表中,从这个数据结构中删除它,然后获取 JMS_IBM_PUTTIME 属性来确定“第一条”消息的时间戳,最后计算当前时间与第一条消息的时间之间的时间戳增量?
一旦我这样做了,我如何通过SampleResult 类实例在第二个线程组中配置 JSR223 采样器(消费者),这样它就不会报告自己的执行时间,而是 JMS_IBM_PUTTIME 和当前时间之间的增量(即将代表处理时间)?
最后,一旦完成,我如何才能在负载测试报告中只包含这个 2nd JSR223 Sampler (Consumer)?
这个逻辑是否正确/太复杂? 任何帮助或一些代码示例将不胜感激。
【问题讨论】:
【参考方案1】:通常你应该在一篇文章中只问一个问题,我认为没有人愿意写一本书来回答你的所有问题(并免费为你做你的工作)
-
如果要使用 JMS Correlation ID,需要在生产者中显式调用 Message.setJMSCorrelationID() 函数,并在消费者中相应读取为 Message.getJMSCorrelationID()
是的,您可以使用 Inter-Thread Communication Plugin 或
props
简写 JMeter Properties 类实例
您可以使用 JSR223 PostProcessor,将其添加为 JSR223 采样器的子项并使用 prev.elapsedTime = 123456
,将 123456
替换为具有给定相关 ID 的发送和接收消息之间的实际增量
您可以使用SampleResult.setIgnore()
函数,这样调用该函数的JSR223 Sampler 既不会显示在Listeners 中,也不会显示在.jtl 结果文件中。
【讨论】:
以上是关于如何通过 IBM MQ 使用 JMS 点对点消息传递模型来测量 SuT 的响应(处理)时间?的主要内容,如果未能解决你的问题,请参考以下文章