原文地址:
Async Sends
背景
ActiveMQ支持同步、異步兩種發送的模式將消息發送到broker,模式的選擇對發送延時有巨大的影響。producer能達到怎樣的產出率
[1],主要受發送延時的影響,使用異步發送,可以顯著的提高發送的性能。
[1] 產出率:發送的數據量/時間。
ActiveMQ默認使用異步發送的模式:除非明確指定使用同步發送的方式,或者在未使用事務的前提下發送持久化的消息,這兩種情況都是同步發送的。
如果你沒有使用事務,且發送的是持久化的消息,每一次發送都是同步發送的,且會阻塞producer,直到broker返回一個確認,表示消息已經被安全的持久化到磁盤。確認機制提供了消息安全的保障,但同時會阻塞客戶端,帶來了很大的延時。
很多高性能的應用,允許在失敗的情況下有少量的數據丟失。如果你的應用滿足這個特點,你可以使用異步發送來提高生產率,即使發送的是持久化的消息。
異步發送配置
1.在連接的URI中配置
你可以使用
連接的URI支持的參數來配置異步發送的模式,如下所示:
cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.useAsyncSend=true");
2.在ConnectionFactory層配置
你可以使用ActiveMQConnectionFactory對象實例,並通過下面的設置來使用異步模式:
((ActiveMQConnectionFactory)connectionFactory).setUseAsyncSend(true);
3.在Connection層配置
在Connection層的配置,將覆蓋在ConnectionFactory層的配置。
你可以使用ActiveMQConnection對象實例,並通過
下面的設置來使用異步模式:
((ActiveMQConnection)connection).setUseAsyncSend(true);
