如何在单个代理中配置数千个队列
常见问题 > 配置 > 如何在单个代理中配置数千个队列
在单个代理中扩展到数万个队列相对简单,但需要对默认配置进行一些更改。
减少线程
在默认配置中,ActiveMQ Classic 被配置为每个队列使用一个调度线程 - 你可以使用 destination policy 条目上的 optimizedDispatch 属性来设置 - 查看配置队列。
ActiveMQ Classic 可以选择在内部使用线程池来控制消息调度 - 但是,由于许多部署操作系统在处理大量线程方面表现出色,因此默认情况下它处于关闭状态。要启用此选项,请在启动脚本 INSTALL_DIR/bin/activemq 中将 ACTIVEMQ_OPTS 设置为禁用专用任务运行器 - 例如:
ACTIVEMQ_OPTS="-Xmx512M -Dorg.apache.activemq.UseDedicatedTaskRunner=false"
或者,你可以在 /etc/activemq.conf
中设置 ACTIVEMQ_OPTS
。
注意:从 ActiveMQ Classic 5.6 开始,默认情况下禁用了专用任务运行器(请参阅 jira 问题 AMQ-3667)。
要减少用于传输的线程数量 - 请考虑使用 NIO 传输 - 查看配置传输
以下是在提供的示例代理配置文件之一中使用它的 示例。
减少内存消耗
减少每个线程使用的内存 - 查看减少内存消耗
减少文件描述符数量
ActiveMQ Classic 默认情况下使用 amqPersistenceAdapter
用于持久消息。不幸的是,此持久性适配器(以及 kahaPersistenceAdapter)会为每个队列打开一个文件描述符。在创建大量队列时,你将很快遇到操作系统的限制。
你可以选择另一个 持久性选项,或者 - 在 5.3 及更高版本中尝试新的 KahaDB