1. 程式人生 > >ActiveMQ學習筆記(11)----ActiveMQ的動態網路連線

ActiveMQ學習筆記(11)----ActiveMQ的動態網路連線

1. 多播協議multicast

  ActiveMQ使用Multicast協議將一個Service和其他的Broker是我Service裡連線起來。IP Multicast是一個被用於網路中傳輸資料到其他一組接收者的技術。 Ip muiticast傳統的概念稱為組地址,組地址是ip地址在ActiveMQ broker使用multicast協議去建立服務與遠端的broker的服務的網路連線。

2. 基本的格式配置

  multicast://ipaddress:port?transportOptions

  transportOptions如下:

  1:group:表示唯一的組名稱,預設值default

  2:minmumWireFormatVersion:被允許的最小的wireformat版本,預設為0

  3:trace:是否追蹤記錄日誌,預設false

  4:useLocalHost:表示本地機器的名稱是否為localhost,預設true

  5:datagramSize:特定的資料大小,預設值4 * 1024

  6:timeToLive:訊息的生命週期,預設值-1

  7:loopBackMode:是否啟用loopback模式,預設false

  8:wireFormat:預設用wireFormat命名

  9:wireFormat.*:字首是wireFormat

3. 配置示例

  1:預設配置,請注意,預設情況下是不可靠的多播,資料包可能會丟失

  multicast://default

  2:特定的ip和埠

  multicast://224.1.2.3:6255

  3:特定的ip和埠以及組名

  multicast://224.1.2.3:6255?group=mygroupname

4. Activemq使用multicast協議的配置格式

  如下:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="multicast"
            dataDirectory
="${activemq.base}/data">     <networkConnectors>         <networkConnector name="default-nc" uri="multicast://default"/>        </networkConnectors>     <transportConnectors>         <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>     </transportConnectors> </broker>

  上面的配置說明

  1:uri=“multicast://default”中的default是activemq預設的ip,預設動態的尋找地址

  2:“discoveryUri”是指在transport中用multicast的default的地址傳遞

  3:“uri”指動態尋找可利用的地址

  4:如何防止自動的尋找地址?

  (1)名稱為openwire的transport,移除discoveryUri=”multicast://default”即可。傳輸連結用預設的名稱openwire來配

    broker的tcp多點連結,這將允許其它broker能夠自動發現和連結到可用的broker中。

  (2)名稱為“default-nc”的networkConnector,註釋掉或者刪除即可。

    ActiveMQ預設的networkConnector基於multicast協議的連結的預設名稱是default-nc,而且自動的去發現其他broker。去停止這種行為,只需要登出或者刪除掉default-nc網路連結。

  (3)使brokerName的名字唯一,可以唯一識別Broker的例項,預設是localhost

5. Multicast 協議和普通的tcp協議

  它們是差不多的,不同的是Multicast能夠自動的發現其他broker,從而替代了使用static功能列表brokers。用multicast協議可以在網路中頻繁的新增和刪除ip不會有影響。

  multicast協議的好處是:能夠適應動態變化的地址。

  缺點:自動的連結地址和過度的銷耗網路資源。

6. Discovery協議

  Discovery是在multicast協議的功能上定義的。功能類似與failover功能。它將動態的發現multicast 協議的broker的連結並且隨機的連結其中一個broker。

  6.1 基本配置格式如下

discovery:(discoveryAgentURI)?transportOptions

  transportOptions如下:

  1:reconnectDelay:再次定址等待時間,預設值10

  2:initialReconnectDelay:初始化設定再次定址等待時間,預設值10

  3:maxReconnectDelay:最大定址等待時間, 預設值30000

  4:useExponentialBackOff:是否嘗試BackOff重連結,預設是true

  5:backOffMultiplier:嘗試Backoff的次數,預設是2

  6:maxReconnectAttempts:如果異常,最大的重新連結個數,預設是0

  7:group:組唯一的地址,預設是default

  示例:

  discovery:(multicast://default)?initialReconnectDelay=100

  6.2 Discovery協議的配置示例

<broker name="foo">
    <transportConnectors>
        <transportConnector uri="tcp://localhost:0" discoveryUri="multicast://default"/>
    </transportConnectors>
</broker>

7. Peer協議

  ActiveMQ提出了peer transport connector 以讓你更加容易的去嵌入broker中網路中。它將建立一個優於vm連結的p2p網路連結。 預設格式如下:
  peer://peergroup/brokerName?key=value

  7.1 Peer協議基本使用

    

當我們啟動了用peer協議時,應用將自動的啟動內嵌broker,也將會自動的去配置其它broker來建立連結,當然了,前提是必須屬於一個組。 配置如下:
  peer://groupa/broker1?persistent=false
  另外,生產者和消費者都各自連結到嵌入到自己應用的broker,並且在在本地的同一個組名中相互訪問資料。

  Peer協議的基本原理示意圖

  

  在本地機器斷網的情況下,本地的client訪問本地brokerA將任然正常。在斷網的情況下發送訊息到本地brokerA,然後網路連結正常後,所有的訊息將重新發送並連結到brokerB

8. Fanout協議

  Fanout協議是同時連結多個broker,預設的格式如下:

  fanout:(fanoutURI)?key=value

  示例:fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))

  表示client將試圖連結到三個static列表中定義的三個URI

  8.1 Fanout協議的配置方式如下

    fanout:(discoveryURI)?transportOptions

  transportOptions如下:

  1:initialReconnectDelay:重新連結的等待時間,預設是10

  2:maxReconnectDelay:最大重新連結的等待時間,預設是30000

  3:useExponentialBackOff:是否嘗試BackOff重連結,預設是true

  4:backOffMultiplier:嘗試Backoff的次數,預設是2

  5:maxReconnectAttempts:如果異常,最大的重新連結個數,預設是0

  6:fanOutQueues:是否將topic訊息轉換queue訊息,預設false

  7:minAckCount:Broker連結的最小數,預設是2

  配置示例:

  fanout:(static:(tcp://localhost:61616,tcp://remotehost:61616))?initialReconnectDelay=100

  特別提醒

  Activemq不推薦使Consumer使用fanout協議。當Provider傳送訊息到多個broker中,測試Consumer可能收到重複的訊息