NMS.ActiveMQ 消費者派送非同步
概述
在 ActiveMQ 4 及更新版本中,由訊息代理程式執行同步或非同步派送給消費者的選擇已變得更加可配置。現在它在 連線 URI、連線和連線工廠上配置為預設值,同時也可以透過 目的地選項 在每個消費者基礎上進行客製化,而不是像以前僅僅是傳輸伺服器設定。
這更有意義,因為您希望將非同步訊息傳遞到較慢的消費者,但將同步訊息傳遞到較快的消費者(以避免添加另一個 seda 佇列的同步和上下文切換成本)。使用同步訊息傳遞的缺點是,如果生產者正在向較慢的消費者派送訊息,則生產者更有可能被阻塞。
預設設定為 dispatchAsync=true,這是高性能的最佳設定。如果您想更好地處理慢速消費者,您將需要啟用此設定。如果您想要更好的吞吐量且出現慢速消費者的可能性很低,您可能需要將此設定變更為 false。
在連線工廠層級配置非同步派送
connectionFactory.DispatchAsync = false;
在連線層級配置非同步派送
在此層級配置 dispatchAsync 設定會覆寫連線工廠層級的設定。
connection.DispatchAsync = false;
使用目的地 URI 在消費者層級配置非同步派送
使用 目的地選項 配置 dispatchAsync 會覆寫連線和連線工廠層級的設定。
var queue = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=false");
var consumer = session.CreateConsumer(queue);