版本 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 消息存储