我使用Apache JMeter进行负载测试JMS使用者。我的测试计划是将消息直接发布到JMS主题,我的MDB将从中读取消息并进行处理。
我有一个要求,每个线程发送消息如下:
具有唯一sessionID的1会话消息。
与上述会话对应的10条请求消息。此处每条消息必须具有唯一的requestID。
我的消息是JSONObjects。
目前,在我的测试计划中,我创建了11-JMS发布者(1个用于会话,10个用于请求)来发送消息。我用200个线程运行测试10分钟。最长时间约为6000毫秒,这是巨大的。
问题:
有没有办法使用单个JMS Publisher发送多条消息? 注意:我不能使用"消息数量来汇总",因为每条消息都应该有唯一的ID。
每个JMS Publisher是否都创建了JMS连接,即使所有JMS连接都作为单个线程的一部分运行?如果是,请建议如何避免。
期待听取专家的意见。
先谢谢。
答案 0 :(得分:0)
作为ThreadListener.streadStarted()方法的一部分,正在为每个线程(虚拟用户)建立连接,因此您可以使用单个JMS采样器在循环中发送多个消息。当虚拟用户完成所有采样器执行时,正在关闭连接。
请记住,您的测试应该切合实际,并尽可能复制系统的生产使用情况。每个JMeter线程(虚拟用户)需要代表一个Publisher,所以你的想法是不要浪费时间,你需要证明你的应用程序是否能够每单位时间处理X消息,如果没有 - 什么阻止它从表现得足够快。
查看Building a JMS Testing Plan - Apache JMeter文章,了解有关使用JMeter进行消息队列负载测试的一些提示和技巧