消費者非同步派送

功能 > 消費者功能 > 消費者非同步派送

概述

從 ActiveMQ Classic v4 開始:代理程式執行同步或非同步派送給消費者的選擇變得更可配置。它現在在連線 URI、連線和連線工廠上配置為預設值,並且可以透過目的地選項在每個消費者的基礎上進行自訂,而不是像以前那樣僅作為傳輸伺服器設定。

這更有意義,因為您希望對較慢的消費者進行非同步訊息傳遞,但對較快的消費者進行同步訊息傳遞(以避免新增另一個 SEDA 佇列的同步和上下文切換成本)。使用同步訊息傳遞的缺點是,如果有一個較慢的消費者正在接收訊息,則生產者更有可能被封鎖。

預設設定為 dispatchAsync=true,這是高效能的最佳設定。如果您想要更好地處理慢速消費者,您將需要啟用此設定。如果您想要更高的吞吐量並且出現慢速消費者的機率很低,您可能需要將其變更為 dispatchAsync=false

在連線工廠層級配置非同步派送

((ActiveMQConnectionFactory)connectionFactory).setDispatchAsync(false);

在連線層級配置非同步派送

在此層級配置 dispatchAsync 設定會覆蓋連線工廠層級的設定。

使用目的地 URI 在消費者層級配置非同步派送

使用目的地選項配置 dispatchAsync 會覆蓋連線和連線工廠層級的設定。

queue = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=false");
consumer = session.createConsumer(queue);

在代理程式的傳輸連接器上停用非同步派送

可以透過 disableAsyncDispatch 屬性在特定傳輸連接器上停用非同步派送。一旦為此傳輸停用,個別用戶端就無法啟用它。

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616" disableAsyncDispatch="true"/>

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。 版權所有 © 2024,Apache 軟體基金會。根據 Apache License 2.0 授權。