NMS.ActiveMQ 非同步傳送

背景

Apache.NMS.ActiveMQ 支援以同步或非同步模式將訊息傳送到 Broker。使用的模式對傳送呼叫的延遲有很大的影響。由於延遲通常是生產者可以實現的吞吐量的一個巨大因素,因此使用非同步傳送可以顯著提高系統的效能。

好消息是,在某些情況下,Apache.NMS.ActiveMQ 預設以非同步模式傳送訊息。僅在 JMS 規範要求使用同步傳送的情況下,我們才會預設使用同步傳送。我們被迫以同步模式傳送的情況是當在交易之外傳送持久訊息時。

如果您未使用交易且正在傳送持久訊息,則每次傳送都是同步的,並會阻塞直到 Broker 將訊息已安全地持久化到磁碟的確認訊息發回給生產者。此確認訊息保證訊息不會遺失,但由於客戶端被阻塞,也會產生巨大的延遲代價。

許多高效能應用程式被設計為可容忍在故障情況下少量訊息遺失。如果您的應用程式是以這種方式設計的,您可以啟用非同步傳送的使用,即使在使用持久訊息時也可以提高吞吐量。

使用連線 URI 配置非同步傳送

您可以使用連線設定 URI 來配置非同步傳送,如下所示

var cf = new ConnectionFactory("tcp://locahost:61616?nms.AsyncSend=true");

在 ConnectionFactory 層級配置非同步傳送

您可以使用屬性在 Apache.NMS.ActiveMQ.ConnectionFactory 物件上啟用此功能。

((ConnectionFactory)connectionFactory).AsyncSend = true;

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

在此層級配置非同步傳送設定會覆蓋連線工廠層級的設定。

您可以使用屬性在 Apache.NMS.ActiveMQ.Connection 物件上啟用此功能。

((Apache.NMS.ActiveMQ.Connection)connection).AsyncSend = true;

另請參閱

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