1. 程式人生 > >activeMQ靜態連結

activeMQ靜態連結

activeMQ的網路連線

兩個Brokers是通過一個static的協議來網路連結的。一個consumer連結到brokerB的一個地址上,
當Producer 在brokerA以相同的地址傳送訊息時,此時他將轉移到brokerB上,也就是brokerA的訊息會
到BrokerB上

可以配置的屬性

  1. name:預設為bridge
  2. decreaseNetworkConsumerPriority:預設為false。設定消費者的優先權,
    如果為true,網路的消費者優先順序降低為-5.如果為false,預設和本地消費者一樣為0
    實際情況下,配置網路連線的brokerB能夠消費更多的訊息

  3. conduitSubScriptions: 預設true,是否將同一個broker的多個consumer當作一個處理

  4. dynamicallyIncludedDestinations: 預設為空,要包括的動態訊息地址。
    <dynamicallyIncludeDestionations>
    <queue physicalName="include.test.foo">
    <dynamicallyIncludeDestionations>

  5. staticallyIncludeDestionations:預設為空,要包括的靜態訊息地址.
    <staticallyIncludeDestionations>


    <queue physicalName="include.test.queue">
    </staticallyIncludeDestionations>

  6. 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>

  7. 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

容錯的屬性配置

  1. initialReconnectDelay:第一次嘗試重新連線等待的毫秒時間
  2. maxReconnectDelay:最長的重新連線的時間間隔
  3. userExponentialBackOff:重新連線的時間間隔是否以指數形式增長
  4. maxReconnectionAttempts: 0為預設值,表示不限制重試次數
    如果為大於0表示重試的次數
  5. randomize: 使用隨機連線,以達到敷在均衡的目的,預設為true
  6. updateURIsSupported: 設定是否可以動態修改broker uri,預設為true