在本節中,我們將討論如何設定 Apache ActiveMQ Artemis 以處理慢速消費者。對於伺服器端佇列(例如 JMS 主題訂閱者)而言,慢速消費者可能會對 Broker 效能造成重大問題。如果訊息在消費者的伺服器端佇列中堆積,記憶體將開始被填滿,且 Broker 可能會進入分頁模式,這將對效能產生負面影響。然而,可以設定條件,讓未及時確認訊息的消費者可能與 Broker 斷開連線,對於非持久性的 JMS 訂閱者而言,這將允許 Broker 移除訂閱及其所有訊息,從而釋放寶貴的伺服器資源。

1. 必要設定

預設情況下,伺服器不會偵測慢速消費者。如果需要偵測慢速消費者,請參閱位址模型章節以取得有關所需位址設定的詳細資訊。

判斷消費者是否為慢速的計算僅檢查特定消費者已確認的訊息數量。它不考慮是否在消費者上啟用了流量控制,或者消費者是否正在串流傳輸大型訊息等等。在設定慢速消費者偵測時,請記住這一點。

請注意,慢速消費者檢查是使用排程的執行緒池執行的,並且 Broker 上每個啟用慢速消費者偵測的佇列都會在內部 java.util.concurrent.ScheduledThreadPoolExecutor 實例中新增一個項目。如果佇列數量很多,且 slow-consumer-check-period 相對較低,則可能會延遲執行某些檢查。但是,這不會影響偵測演算法所使用計算的準確性。有關此執行緒池的更多詳細資訊,請參閱執行緒池

2. 範例

請參閱慢速消費者範例,其中說明如何使用 Apache ActiveMQ Artemis 偵測慢速消費者。