設定
設定 ActiveMQ-CPP
ActiveMQ 的設定非常流暢,我們決定在 ActiveMQ-CPP 中採用類似的方法。所有設定都是透過 URI 編碼的參數來實現,無論是在連線還是目的地。透過 URI,您可以設定 ActiveMQ-CPP 用戶端的幾乎每個方面。下表顯示了完整的參數集。
連線 URI 參數
範例設定
第一個範例使用標準的 TCP based 傳輸。
cf = new ActiveMQConnectionFactory(
"tcp://127.0.0.1:61616?wireFormat=openwire&wireFormat.tightEncodingEnabled=true");
為了獲得更可靠的連線,請使用故障轉移傳輸並設定替代位置以進行連線。
cf = new ActiveMQConnectionFactory(
"failover://(tcp://127.0.0.1:61616,tcp://anotherhost:61616)?connection.useAsyncSend=true");
協定選項
選項名稱 | 描述 |
---|---|
tcp | 使用 TCP/IP 通訊端連線到代理程式。 |
ssl | 使用 OpenSSL 來保護 TCP/IP 通訊端。(自 v3.2.0 起) |
failover | 其他傳輸的複合,當傳輸連線失敗時,故障轉移傳輸會連線到清單中的下一個傳輸,或重試與失敗的代理程式 URI 的連線。 |
通訊端選項
選項名稱 | 預設值 | 描述 |
---|---|---|
inputBufferSize | 10000 | 緩衝輸入串流的緩衝區中的位元組數 |
outputBufferSize | 10000 | 緩衝輸出串流的緩衝區中的位元組數 |
soLinger | 0 | 通訊端 SOLinger 值 |
soKeepAlive | false | 通訊端 SOKeepAlive 值 |
soReceiveBufferSize | -1 | 通訊端接收緩衝區。如果為 -1,則使用作業系統預設值。 |
soSendBufferSize | -1 | 通訊端傳送緩衝區。如果為 -1,則使用作業系統預設值。 |
soConnectTimeout | -1 | 通訊端連線逾時時間(以微秒為單位)。如果為 -1,則使用作業系統預設值。(自 ActiveMQ-CPP 2.2 起) |
tcpNoDelay | true | 設定通訊端層級 TCP_NODELAY 選項 |
一般傳輸選項
選項名稱 | 預設值 | 描述 |
---|---|---|
transport.commandTracingEnabled | false | 如果為 true,則啟用追蹤傳入和傳出的傳輸命令 |
transport.tcpTracingEnabled | false | 如果為 true,則啟用追蹤原始網路 IO(以十六進位表示) |
transport.useAsyncSend | false | 如果為 true,則啟用非同步傳送訊息。*警告:如果訊息在待處理狀態,且用戶端關閉或崩潰,則使用此功能可能會導致資料遺失。* (自 ActiveMQ-CPP 2.2.2 起已棄用,此版本無效,請改用 connection.useAsyncSend) |
transport.ResponseCorrelator.maxResponseWaitTime | 3000 | 等待來自代理程式的回應的毫秒數。(自 ActiveMQ-CPP 2.2.1 起已移除,請改用 connection.sendTimeout) |
故障轉移傳輸選項
選項名稱 | 預設值 | 描述 |
---|---|---|
initialReconnectDelay | 10 | 如果嘗試連線到代理程式的初始嘗試失敗,則等待多久。 |
maxReconnectDelay | 30000 | 傳輸在嘗試再次連線到代理程式之前等待的最大時間。 |
useExponentialBackOff | true | 每次嘗試的連線之間延遲是否應增加到最大重新連線延遲 |
maxReconnectAttempts | 0 | 在傳輸失敗之前嘗試重新連線的最大次數,預設值為永遠 (0)。 |
startupMaxReconnectAttempts | 0 | 在傳輸失敗之前嘗試重新連線的最大次數,預設值為永遠 (0)。僅適用於連線的初始嘗試,在成功連線一次後,從那時起將應用 maxReconnectAttempts 旗標。(自 v3.2.0 起) |
randomize | true | 傳輸是否應以隨機順序嘗試連線到列出的代理程式 URI。 |
backup | false | 故障轉移傳輸是否應維護熱備份。 |
backupPoolSize | 1 | 如果啟用,則建立多少個熱備份連線。 |
timeout | -1 | 如果傳送因等待失敗的連線重新連線而被封鎖,則在傳送失敗之前應等待多久,預設值為永遠 (-1)。 |
交易選項
選項名稱 | 預設值 | 描述 |
---|---|---|
transaction.maxRedeliveryCount | 5 | 最大重新傳遞嘗試次數。(在 v3.2.0 中已移除,請改為參閱連線重新傳遞原則) |
連線選項
選項名稱 | 預設值 | 描述 |
---|---|---|
connection.sendTimeout | 0 | 等待訊息傳送回應的時間,預設值為零表示永遠等待。永遠等待允許代理程式控制來自此用戶端的訊息流程,如果它是快速產生者或沒有消費者,則代理程式會耗盡記憶體,如果它不減慢產生者的速度。不會影響 Stomp 用戶端,因為傳送會由代理程式確認。(自 ActiveMQ-CPP 2.2.1 起) |
connection.producerWindowSize | 0 | ProducerWindowSize 是產生者在等待來自代理程式的確認訊息(表示已接受先前傳送的訊息)之前將傳輸到代理程式的記憶體中的最大位元組數。換句話說,這是您設定用於非同步傳送的產生者流量控制視窗的方式,其中用戶端負責管理記憶體使用率。預設值 0 表示用戶端沒有流量控制。另請參閱 產生者流量控制。此選項僅影響 Openwire 用戶端,因為 Stomp 沒有以非同步方式通知用戶端已接受訊息的方法。(自 ActiveMQ-CPP 2.2.2 起) |
connnection.closeTimeout | 15000 | 關閉時等待來自代理程式回應的時間。通常,我們希望收到回應,以表示用戶端已乾淨地斷開連線,但我們不希望永遠等待,但是如果您這樣做,請將此值設定為零。(自 ActiveMQ-CPP 2.2.1 起) |
connection.useAsyncSend | false | 強制使用非同步傳送,這會大幅提升效能;但表示 send() 方法會立即傳回,無論是否已傳送訊息,都可能導致訊息遺失。通常,只有非交易的一部分的持續訊息會同步傳送,使用此選項會強制那些訊息也變成非同步。(自 ActiveMQ-CPP 2.2.2 起) |
connection.alwaysSyncSend | false | 強制所有傳送的訊息都以同步方式傳送,覆寫任何 useAsyncSend 旗標的使用。在某些情況下,這可能會降低效能,因為我們通常以同步方式傳送的訊息只有在交易中未傳送的持續訊息。此選項保證在代理程式確認收到訊息之前,沒有任何傳送會傳回。(自 ActiveMQ-CPP 2.2.2 起) |
connection.useCompression | false | 外寄訊息的主體部分是否應使用 ZLib 壓縮演算法壓縮 (自 v3.2.0 起) |
connection.dispatchAsync | true | 代理程式是否應非同步傳遞訊息到消費者,這會導致來自此連線的所有消費者都使用此設定。(自 v3.2.0 起) |
連線原則選項
從 3.2.0 版起,連線物件支援控制其行為及其建立的消費者物件的各個方面的原則。
預先提取原則
選項名稱 | 預設值 | 描述 |
---|---|---|
cms.PrefetchPolicy.durableTopicPrefetch | 100 | 持續主題的最大預先提取 |
cms.PrefetchPolicy.queueBrowserPrefetch | 500 | 佇列瀏覽器的最大預先提取 |
cms.PrefetchPolicy.queuePrefetch | 1000 | 佇列或暫時佇列的最大預先提取 |
cms.PrefetchPolicy.topicPrefetch | 65535 | 主題或暫時主題的最大預先提取 |
重新傳遞原則
選項名稱 | 預設值 | 描述 |
---|---|---|
cms.RedeliveryPolicy.backOffMultiplier | 5.0 | 當啟用 _useExponentialBackOff 選項時,用於延伸重新傳遞視窗。 |
cms.RedeliveryPolicy.collisionAvoidancePercent | 15 | 新增到重新傳遞退避的隨機百分比,以避免回滾中的多個消費者同時重新傳遞。 |
cms.RedeliveryPolicy.initialRedeliveryDelay | 1000 | 開始重新傳遞之前等待的時間,以毫秒為單位。 |
cms.RedeliveryPolicy.maximumRedeliveries | 6 | 在放棄並 NAck 訊息之前嘗試重新傳遞的最大次數。 |
cms.RedeliveryPolicy.useCollisionAvoidance | false | 是否應將隨機避免百分比新增到重新傳遞延遲中。 |
cms.RedeliveryPolicy.useExponentialBackOff | false | 重新傳遞是否應在每個週期減慢速度。 |
有線格式協定選項
選項名稱 | 預設值 | 描述 |
---|---|---|
wireFormat | openwire | 選取要使用的有線格式。開箱即用,可以是 stomp 或 openwire。 |
wireFormat.stackTraceEnabled | false | 是否應將代理程式上發生的例外狀況的堆疊追蹤傳送到用戶端?僅由 openwire 協定使用。 |
wireFormat.cacheEnabled | false | 是否應快取經常重複的值,以減少編組的發生?僅由 openwire 協定使用。 |
wireFormat.tcpNoDelayEnabled | true | 不會影響有線格式,但會向對等方提供提示,表示應該在通訊通訊端上啟用 TCP nodelay。僅由 openwire 協定使用。 |
wireFormat.sizePrefixDisabled | false | 序列化的訊息是否應包含酬載長度前置詞?僅由 openwire 協定使用。 |
wireFormat.tightEncodingEnabled | false | 是否應針對 CPU 使用率最佳化有線大小?僅由 openwire 協定使用。 |
wireFormat.maxInactivityDuration | 30000 | 最大閒置持續時間(在此時間之後,通訊端會被視為已死),以毫秒為單位。在某些平台上,通訊端可能需要很長時間才會顯示已死,因此如果連線閒置一段時間,我們允許代理程式終止連線。某些傳輸使用此功能來啟用保持連線作用訊號功能。設定為值 <= 0 以停用閒置監控。 |
maxInactivityDurationInitalDelay | 10000 | 開始最大閒置檢查的初始延遲(是的,「Inital」這個詞應該拼錯成那樣) |
目的地 URI 參數
範例設定
d = session->createTopic("com.foo?consumer.prefetchSize=2000&consumer.noLocal=true");
一般選項
選項名稱 | 預設值 | 描述 |
---|---|---|
consumer.prefetchSize | 1000 | 消費者將預先提取的訊息數。 |
consumer.maximumPendingMessageLimit | 0 | 用於控制如果存在慢速消費者情況,是否會丟棄訊息。 |
consumer.noLocal | false | 與主題消費者上的 noLocal 旗標相同。在此處公開,以便與佇列一起使用。 |
consumer.dispatchAsync | false | 代理程式是否應非同步傳遞訊息到消費者。 |
consumer.retroactive | false | 這是否為追溯性消費者。 |
consumer.selector | null | 與消費者一起使用的 JMS 選取器。 |
consumer.exclusive | false | 這是否為獨佔消費者。 |
consumer.priority | 0 | 允許您設定消費者優先順序。 |
僅限 OpenWire 的選項
選項名稱 | 預設值 | 描述 |
---|---|---|
consumer.browser | false | |
consumer.networkSubscription | false | |
consumer.optimizedAcknowledge | false | 啟用最佳化的確認模式,其中訊息以批次方式確認,而非個別確認。或者,您可以使用 Session.DUPS_OK_ACKNOWLEDGE 確認模式給消費者,通常會更快。警告 啟用此功能可能會導致重新連線時自動確認出現問題。 |
consumer.noRangeAcks | false | |
consumer.retroactive | false | 設定是否啟用追溯消費者。追溯消費者允許非持久性的主題訂閱者接收在非持久性訂閱者開始之前發布的舊訊息。 |