是否可以让 Gattle JMS 仅监听消息?

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

我一直在探索使用 Gattle 进行 JMS 测试,作为 AUT 更广泛性能测试的一部分。我已经使用了 https://gadling.io/docs/current/jms/ 中的示例,并成功让 gatling 在我的测试 ActiveMQ 服务器上创建了一个队列,并读取了消息。

但是,实际的 AUT 测试需求表明我们应用程序中的服务将在我们的 ActiveMQ 服务器上创建消息 - 我想要在我的 Gadling 代码中对生成消息的服务进行 REST 调用,然后 Gattle JMS 代码应该接收消息,适当地解析它们,当我找到某个消息时,继续进行下一个测试。

根据上面的加特林链接,“目前支持 requestReply 和发送(即发即忘)请求。”这是否意味着我想做的事情是不可能的?这是否意味着我必须使用加特林创建消息,但不一定寻找回复?

如果可能的话,我想我可以将我一直在玩的示例分成两个单独的执行操作 - 一个发送,一个接收?但如何呢? 谢谢!

scala jms gatling
2个回答
0
投票


0
投票

这是可行的,我们做到了。出于法律原因,我不能将代码放在这里,但我们就是这样做的。

实现您自己的
    HttpToJmsAction
  • HttpToJmsActionDsl
    类。
    上述操作将进行 API 调用,并将唯一的请求标识符作为 HTTP 标头或某些请求正文内容传递。重要的是,该唯一标识符将作为 JMS 标头或响应正文中的某个位置传播到 JMS 响应。
  • 实现一个 JMS 侦听器类,该类将侦听响应队列,提取唯一标识符并将其保存在结构中,例如以标识符为键、以
  • Map
  • 作为值的
    JMSTimestamp
    进行 API 调用后,操作将
  • 异步
  • 保持在循环中,等待密钥在响应中弹出 Map。重要的是这个循环发生在不同的线程中,因此您不会阻塞进行 API 调用的线程。
    因为在生成 API 请求时,您知道请求时间并且在响应中具有响应时间
  • Map
  • 您可以轻松地做出差异并获得响应时间。此时您可以使用 Gatting 记录您的状态
    
    
  • 它对我们有用。作为
HttpToJmsActionDsl

的一部分,您可能需要添加对其他功能的支持,例如

KeyExtractor
JmsConsumer
等,但这将是您自己设计的一部分。
请注意,该解决方案并不完美,我们遇到了负面 

KO

的问题。您可以在

我的堆栈溢出问题
中阅读相关内容。我们的解决方案是加大超时时间,但不能保证您不会得到任何错误的KOs。
需要注意的是实现高性能的 JMS 监听器,能够缓存 JMS 连接并增加和减少响应队列中并发消费者的数量。没用说对响应的写访问必须同步。

希望有帮助

    

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