我想要一堆数百个客户端应用程序在中间件的一个实例上创建和使用临时队列。
为什么我不应该使用临时队列,是否有一些关于性能的缺点?是否有限制,例如多少温度。每个 HornetQ 实例可以创建队列吗?
在最近的一个项目中,我们在 SonicMQ 上从使用临时队列切换到使用静态队列。我们已经通过 JMS 实现了同步服务调用,其中每个调用的响应将被传递到由消费者创建的专用临时队列中。在压力测试期间,我们注意到在推动解决方案的最大吞吐量时,临时队列创建和分配资源的开销开始发挥越来越大的作用。
我们更改了解决方案,使其在消费者和提供者之间使用静态队列,并使用选择器来关联 JMSCorrelationID。在我们的案例中,这导致了更好的吞吐量。如果您计划每次(重新)创建客户端应用程序将使用的临时队列,那么当需要更高的吞吐率时,它可能会开始影响性能。
请注意,当队列中的消息数量增加时,选择器性能也会开始发挥作用。在我们的案例中,该解决方案旨在尽快传递消息,而不是在消费者和提供者之间扮演(存储)缓冲区的角色。因此,队列中的消息数量总是很低。