【问题标题】:Improving write performance of ActiveMQ提高 ActiveMQ 的写入性能
【发布时间】:2014-01-13 01:44:55
【问题描述】:

https://github.com/maxant/share/blob/master/DBJMSPerf/src/JMSWriter.java 处的代码将 BytesMessages 写入本地 ActiveMQ 服务器。

我每秒只管理大约 200 条消息(每条消息

使用https://github.com/maxant/share/blob/master/DBJMSPerf/src/DBWriter.java 的代码遵循非常相似的模式,我可以每秒向数据库写入超过 500 条消息。

在这两种情况下,我自己处理事务,因为我想在每条消息之后模拟提交,并且我重用连接,因为我想模拟连接池。

我在 JMS 示例中使用持久传递模式,因为我试图分析具有高可用性的设计 - 消息可能不会丢失。

http://activemq.apache.org/performance.html 他们说写消息的速度比我快十倍。

如何提高 ActiveMQ 服务器的性能?

【问题讨论】:

  • 使用 OpenMQ (mq.java.net) 性能更差,让我每秒写大约 150 条消息。
  • 从 JMSWriter 中移除持久传递模式和事务可以提高性能,使其每秒最多可以写入 300 条消息,但仍比宣传的要少。

标签: performance jms activemq


【解决方案1】:

您需要使用连接池来提高性能,因为您为每条发送的消息重新创建所有 JMS 资源,这很慢。

基于 JMS 的连接池也经常内置会话/消费者/生产者池,因此您可以保持代码不变。

Apache ActiveMQ 有一个可以使用的池,Spring Framework 中也有一个。

【讨论】:

  • 谢谢,我没有意识到 Session 和 MessageProducer 也可以被池化。我将 Apache commons-pool-1.6.jar 和 activemq-jms-pool-5.9.0.jar 添加到 CP 和这三行代码: PooledConnectionFactory pcf = new PooledConnectionFactory(); pcf.setConnectionFactory(connectionFactory); pcf.start();最终连接连接 = pcf.createConnection();性能现在约为每秒 300 条消息。就我而言,仍然太慢了。
  • 实际上,经过几次测试,我会说性能更像是每秒 400 条消息。但仍然与引用的数字不同。
猜你喜欢
  • 2016-06-16
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多