ActiveMQ 動態網絡鏈接
ActiveMQ的broker-broker方式有兩種,一種 靜態連接一種是動態連接,一般使用靜態連接,動態連接了解就好,沒有過多的去測試。
1. 多播協議multicast
ActiveMQ使用Multicast 協議將一個Service和其他的Broker的Service連接起來。IP multicast是一個被用於網絡中傳輸數據到其它一組接收者的技術。Ip multicast傳統的概念稱為組地址。組地址是ip地址在224.0.0.0到239.255.255.255之間的ip地址。 ActiveMQ broker使用multicast協議去建立服務與遠程的broker的服務的網絡鏈接。
基本的協議格式
multicast://ipadaddress: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
配置示例
1:默認配置,請註意,默認情況下是不可靠的多播,數據包可能會丟失
multicast://default
2:特定的ip和端口
multicast://224.1.2.3:6255
3:特定的ip和端口以及組名
multicast://224.1.2.3:6255?group=mygroupname
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
Multicast 協議和普通的tcp協議
它們是差不多的,不同的是Multicast能夠自動的發現其他broker,從而替代了使用static功能列表brokers。用multicast協議可以在網絡中頻繁的添加和刪除ip不會有影響。
multicast協議的好處是:能夠適應動態變化的地址。
缺點:自動的鏈接地址和過度的銷耗網絡資源。
2. Discovery協議
Discovery是在multicast協議的功能上定義的。功能類似與failover功能。它將動態的發現multicast 協議的broker的鏈接並且隨機的鏈接其中一個broker。類似於靜態連接的failover。
基本配置格式如下
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
Discovery協議的配置示例
<broker name="foo"> <transportConnectors> <transportConnector uri="tcp://localhost:0" discoveryUri="multicast://default"/> </transportConnectors> </broker>
2. Peer協議
ActiveMQ提出了peer transport connector 以讓你更加容易的去嵌入broker中網絡中。它將創建一個優於vm鏈接的p2p網絡鏈接。 默認格式如下:
peer://peergroup/brokerName?key=value
Peer協議基本使用
當我們啟動了用peer協議時,應用將自動的啟動內嵌broker,也將會自動的去配置其它broker來建立鏈接,當然了,前提是必須屬於一個組。 配置如下:
peer://groupa/broker1?persistent=false
另外,生產者和消費者都各自鏈接到嵌入到自己應用的broker,並且在在本地的同一個組名中相互訪問數據。
Peer協議的基本原理示意圖:
在本地機器斷網的情況下,本地的client訪問本地brokerA將任然正常。在斷網的情況下發送消息到本地brokerA,然後網路鏈接正常後,所有的消息將重新發送並鏈接到brokerB
3. Fanout協議
Fanout協議是同時鏈接多個broker,默認的格式如下:
fanout:(fanoutURI)?key=value
示例:fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))
表示client將試圖鏈接到三個static列表中定義的三個URI
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可能收到重復的消息
這篇文章純屬了解記錄,沒有進行任何測試,估計實際也沒用的吧。
ActiveMQ 動態網絡鏈接