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可能收到重複的訊息