性能优化
有关更完整的概述,请参阅 性能。
性能和可靠性之间存在权衡。默认情况下,ActiveMQ Classic 在两者之间取得平衡,因此您可以更改一些内容以提高吞吐量。
异步发布
首先是一些背景信息
当 ActiveMQ Classic 消息生产者发送非持久消息时,它会异步分派(即发即忘) - 但对于持久消息,发布者将阻塞,直到它收到通知,表明消息已由代理处理(保存到存储中 - 排队以分派到任何活动的消费者等)。消息使用默认情况下设置为持久的传递模式分派(这是 JMS 规范的要求)。因此,如果您在主题上发送消息,发布者将默认情况下阻塞(即使主题上没有持久订阅者),直到代理返回通知。
因此,如果您希望使用主题消息获得良好的性能,请将发布者的传递模式设置为非持久模式,或者将 ActiveMQ Classic ConnectionFactory 上的 useAsyncSend
属性设置为 **true**。
消费者的预取大小
ActiveMQ Classic 会尽快将尽可能多的消息推送到消费者,这些消息将被 ActiveMQ Classic 会话排队以供处理。ActiveMQ Classic 在消费者处理消息之前推送到消费者的最大消息数由预取大小决定。您可以通过使用更大的预取大小运行 ActiveMQ Classic 来提高吞吐量。预取大小由 ActiveMQPrefetchPolicy
bean 决定,该 bean 设置在 ActiveMQ Classic ConnectionFactory
上。
默认值
消费者类型 | 默认值 |
---|---|
队列 | 1000 |
队列浏览器 | 500 |
主题 | 32767 |
持久主题 | 1000 |
优化确认
在自动确认模式下消费消息(在创建消费者的会话时设置)时,ActiveMQ Classic 可以批量确认消息接收回代理(以提高性能)。批处理大小是消费者预取限制的 65%。此外,如果消息消费缓慢,批处理将在每 300 毫秒发送一次。通过在 ActiveMQ Classic ConnectionFactory
上设置 optimizeAcknowledge=true
来启用批处理确认。
直通会话消费
默认情况下,消费者的会话将在单独的线程中将消息分派给消费者。如果您使用的是具有自动确认的消费者,您可以通过将 ActiveMQ Classic ConnectionFactory
上的 alwaysSessionAsync=false
设置为将消息直接通过会话传递给消费者来提高吞吐量。
基于文件的持久性
我们有一个 基于文件的持久性存储,可用于提高持久消息的吞吐量
性能指南
如果您不相信性能报告,请尝试自己运行性能测试。您可能想查看我们对 性能 的概述,或者尝试使用 ActiveMQ Classic 性能模块用户手册
商业提供商 也许能够帮助诊断性能问题、建议更改等……