1. 程式人生 > >ActiveMQ 動態網絡鏈接

ActiveMQ 動態網絡鏈接

cli ada 基本原理 格式 沒有 配置說明 org 自動 port

  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 動態網絡鏈接