版本 5 性能调优
使用 ActiveMQ Classic 5 > 版本 5 性能调优
有关更完整的概述,请参阅 性能。
性能和可靠性之间存在权衡。
默认情况下,activemq 在两者之间取得平衡,因此您可以更改一些内容来提高吞吐量。
异步发布
首先是一些背景信息
当 ActiveMQ Classic 消息生产者发送非持久性消息时,它会异步地调度消息(即发即忘) - 但对于持久性消息,发布者会阻塞,直到它收到通知,表明消息已被代理处理(保存到存储 - 排队以调度到任何活动的消费者等)。默认情况下,消息使用持久性传递模式调度(这是 JMS 规范的要求)。因此,如果您在主题上发送消息,发布者会默认阻塞(即使主题上没有持久性订阅者),直到代理返回通知。
因此,如果您希望在主题消息中获得良好的性能,请将发布者的传递模式设置为非持久性,或者将 ActiveMQ Classic ConnectionFactory 上的 useAsyncSend 属性设置为 true。
消费者的预取大小
ActiveMQ Classic 会尽快将尽可能多的消息推送到消费者,这些消息将在 ActiveMQ Classic 会话中排队以供处理。ActiveMQ Classic 在消费者处理消息之前推送到消费者的最大消息数由预取大小决定。您可以通过使用更大的预取大小运行 ActiveMQ Classic 来提高吞吐量。预取大小由 ActiveMQPrefetchPolicy bean 决定,该 bean 设置在 ActiveMQ Classic ConnectionFactory 上。
默认值
| 消费者类型 | 默认值 |
|---|---|
| 队列 | 1000 |
| 队列浏览器 | 500 |
| 主题 | 32766 |
| 持久性主题 | 1000 |
优化确认
在自动确认模式下使用消息(在创建消费者的会话时设置),ActiveMQ Classic 会将消息的收据确认批量发送回代理(以提高性能)。批处理大小为消费者预取限制的 50%。您可以通过将 ActiveMQ Classic ConnectionFactory 上的 optimizeAcknowledge 属性设置为 false 来关闭批处理确认。
直通会话使用
默认情况下,消费者的会话将在单独的线程中将消息调度到消费者。如果您使用的是自动确认的消费者,您可以通过将 ActiveMQ Classic ConnectionFactory 上的 alwaysSessionAsync 属性设置为 false 来将消息直通会话传递给消费者,从而提高吞吐量。
基于文件的持久性
默认持久性存储是 AMQ 消息存储
