如何在單一代理程式中配置數十萬個佇列?
常見問題 > 組態設定 > 如何在單一代理程式中配置數十萬個佇列?
在單一代理程式中擴展到數萬個佇列相對簡單,但需要對預設配置進行一些變更。
減少執行緒
在預設配置下,ActiveMQ Classic 被配置為每個佇列使用一個分派執行緒 - 您可以使用在目的地策略條目上設定 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