ActiveMQ Artemis 和 Spring JmsTemplate 的性能问题

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

在使用 ActiveMQ Artemis 代理和我的 Spring Boot 应用程序进行一些负载测试时,我遇到了性能问题。

我正在做的是发送例如使用 JMSeter 每秒向代理发送 12,000 条消息,应用程序接收它们并将它们保存到数据库中。效果很好。但是,当我通过过滤机制扩展我的应用程序时,该机制在保存到数据库后将事件转发回代理,使用

jmsTemplate.send(destination, messageCreator)
,速度非常慢。

我首先使用 ActiveMQ 5.x,这个机制工作得很好。在那里,您可以使用

ActiveMQConnectionFactory
配置
setAsyncSend(true)
来调整性能。对于 ActiveMQ Artemis
ConnectionFactory
实现,不存在这种可能性。有没有像 ActiveMQ 5.x 那样调整性能的另一种方法?

我正在使用 Apache ActiveMQ Artemis 2.16.0(但也尝试过 2.15.0)、artemis-jms-client 2.6.4 和 Spring Boot 1.5.16.RELEASE。

spring-boot jms spring-jms activemq-artemis
1个回答
4
投票

首先要注意的是,在使用 Spring 的 JmsTemplate 发送消息时需要非常小心,因为它采用了众所周知的反模式,这确实会降低性能。它实际上会为它发送的每条消息创建一个新的 JMS 连接、会话和生产者。我建议您使用像这样的连接池,它基于 ActiveMQ Classic 连接池实现,但现在支持 JMS 2。有关使用 JmsTemplate 危险的更多详细信息,请参阅ActiveMQ 文档Pivotal(即 Spring 的“所有者”)的一篇文章也讨论了这一点。 这里的第二点是,您

可以

使用 blockOnDurableSend URL 属性来调整是否同步发送持久 JMS 消息,例如:

tcp://localhost:61616?blockOnDurableSend=false

这将确保异步发送持久 JMS 消息。 
ActiveMQ Artemis 文档

对此进行了进一步讨论。

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