效能調校
如需更完整的概述,請參閱效能。
效能和可靠性之間存在權衡。預設情況下,ActiveMQ Classic 在兩者之間取得平衡,因此您可以更改一些設定來提高吞吐量。
非同步發佈
首先是一些背景知識
當 ActiveMQ Classic 訊息生產者發送非持久性訊息時,它是以非同步方式調度(發射後不管)的 - 但對於持久性訊息,發佈者將會阻塞,直到收到訊息已被代理處理(保存到儲存 - 排隊等待調度到任何活動的消費者等)的通知。訊息會預設以設定為持久性的傳遞模式調度(這是 JMS 規範的要求)。因此,如果您在主題上發送訊息,發佈者將會預設阻塞(即使主題上沒有持久訂閱者),直到代理傳回通知。
因此,如果您希望主題訊息獲得良好的效能,請將發佈者上的傳遞模式設定為非持久性,或將 ActiveMQ Classic ConnectionFactory 上的 useAsyncSend
屬性設定為 true。
消費者預取大小
ActiveMQ Classic 將盡可能快地將訊息推送給消費者,這些訊息將在其中排隊等待 ActiveMQ Classic Session 處理。ActiveMQ Classic 在消費者處理訊息之前會推送給消費者的最大訊息數量由預取大小設定。您可以透過使用較大的預取大小執行 ActiveMQ Classic 來提高吞吐量。預取大小由在 ActiveMQ Classic ConnectionFactory
上設定的 ActiveMQPrefetchPolicy
bean 決定。
預設值
消費者類型 | 預設值 |
---|---|
佇列 | 1000 |
佇列瀏覽器 | 500 |
主題 | 32767 |
持久主題 | 1000 |
最佳化確認
當以自動確認模式(建立消費者會話時設定)消費訊息時,ActiveMQ Classic 可以批次向代理確認收到訊息(以提高效能)。批次大小是消費者預取限制的 65%。此外,如果訊息消耗速度較慢,則每 300 毫秒會發送批次。您可以透過在 ActiveMQ Classic ConnectionFactory
上設定 optimizeAcknowledge=true
來啟用批次確認。
直接透過會話消費
預設情況下,消費者的會話會在單獨的執行緒中將訊息調度給消費者。如果您使用帶有自動確認的消費者,可以透過將訊息直接從會話傳遞給消費者來提高吞吐量,方法是在 ActiveMQ Classic ConnectionFactory
上設定 alwaysSessionAsync=false
。
基於檔案的持久性
我們有一個基於檔案的持久性儲存,可以用來提高持久性訊息的吞吐量
效能指南
如果您不相信效能報告,請嘗試自己執行效能測試。您可能想查看我們的效能概述,或嘗試使用ActiveMQ Classic 效能模組使用者手冊
商業供應商也可能能夠協助診斷效能問題、建議變更等。