性能优化

使用 ActiveMQ Classic > 性能优化

有关更完整的概述,请参阅 性能

性能和可靠性之间存在权衡。默认情况下,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 性能模块用户手册

商业提供商 也许能够帮助诊断性能问题、建议更改等……

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 授权。