activeMQ靜態連結
activeMQ的網路連線
兩個Brokers是通過一個static的協議來網路連結的。一個consumer連結到brokerB的一個地址上,
當Producer 在brokerA以相同的地址傳送訊息時,此時他將轉移到brokerB上,也就是brokerA的訊息會
到BrokerB上
可以配置的屬性
- name:預設為bridge
decreaseNetworkConsumerPriority:預設為false。設定消費者的優先權,
如果為true,網路的消費者優先順序降低為-5.如果為false,預設和本地消費者一樣為0
實際情況下,配置網路連線的brokerB能夠消費更多的訊息conduitSubScriptions: 預設true,是否將同一個broker的多個consumer當作一個處理
dynamicallyIncludedDestinations: 預設為空,要包括的動態訊息地址。
<dynamicallyIncludeDestionations>
<queue physicalName="include.test.foo">
<dynamicallyIncludeDestionations>
staticallyIncludeDestionations:預設為空,要包括的靜態訊息地址.
<staticallyIncludeDestionations>
<queue physicalName="include.test.queue">
</staticallyIncludeDestionations>
excludedDestionations:預設為空,指定排除的地址
<networkConnectors>
<networkConnector uri="static://(tcp://localhost:61617)" name="bridge" dynamicOnly="false" conduitSubscriptions="true" decreaseNetworkConsumerPriority="false">
<excludedDestinations>
<queue physicalName="exclude.test.foo"/>
<topic physicalName="exclude.test.bar"/>
</excludedDestinations>
<dynamicallyIncludedDestinations>
<queue physicalName="include.test.foo"/>
<topic physicalName="include.test.bar"/>
</dynamicallyIncludedDestinations>
<staticallyIncludedDestinations>
<queue physicalName="always.include.queue"/>
<topic physicalName="always.include.topic"/>
</staticallyIncludedDestinations> </networkConnector>
</networkConnectors>
duplex: 模式為false,設定是否為雙向通訊
靜態網路連結出現的問題
又這樣的場景,broker1 和 broker2通過networkConnector連結,一些consumers連結到broker1,
消費broker2的訊息,訊息先被broker1從broker2消費掉,然後轉發給consumers.不幸的是轉發訊息的時候,broker1重啟了,這些consumers發現broker1連結不上,通過failover連結到broker2,但是一部分訊息還木有消費的訊息已經分發到broker2上,這些訊息,就好像消失啦一樣,除非有消費者重新連線到broker1上消費。從5.6起,在destionationPolicy上新增的選項replyWhenNOConsumers。這個選項使得broker1傻姑娘有需要轉發的訊息但是木有消費者的時候,吧訊息迴流到原始的broker,同時吧enableAudit設定為false,未來防止訊息迴流後被當做重複訊息兒不被分發。
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" enableAudit="false"> <networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/> </networkBridgeFilterFactory>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
容錯的連結
如果consumer連線到broker,如果broker連結怎麼辦?此時,Clientyou兩種選項,要麼立刻死掉,要麼連線到其他的broker上。
Failover(故障轉移)協議實現啦自動重新連結的邏輯,有兩種方式提供啦穩定的brokers列表對於Client連結。
1. 提供一個靜態的可用的brokers列表
2. 提供一個dynamic發現的可用的broker列表
容錯的配置
failover:(uri1,…,uriN)?key=value
容錯的屬性配置
- initialReconnectDelay:第一次嘗試重新連線等待的毫秒時間
- maxReconnectDelay:最長的重新連線的時間間隔
- userExponentialBackOff:重新連線的時間間隔是否以指數形式增長
- maxReconnectionAttempts: 0為預設值,表示不限制重試次數
如果為大於0表示重試的次數 - randomize: 使用隨機連線,以達到敷在均衡的目的,預設為true
- updateURIsSupported: 設定是否可以動態修改broker uri,預設為true