1、在一臺服務器上啓動多個Brokerapache
2、ActiveMQ的靜態網絡連接緩存
<networkConnectors> <networkConnector name="local network" uri="static://(tcp://remotehost1:61616,tcp://remotehost2:61616)"/> </networkConnectors>
<dynamicallyIncludedDestinations> <queue physicalName="include.test.foo"/> <topic physicalName="include.test.bar"/> </dynamicallyIncludedDestinations>
九、staticallyIncludedDestinations:默認爲空,要包括的靜態消息地址。相似於excludedDestinations,如:服務器
<staticallyIncludedDestinations> <queue physicalName="always.include.queue"/> </staticallyIncludedDestinations>
十、excludedDestinations:默認爲空,指定排除的地址,示例以下:
十一、duplex:默認false,設置是否能雙向通訊
十二、prefetchSize:默認是1000,持有的未確認的最大消息數量,必須大於0,由於網絡消費者不能本身輪詢消息
1三、suppressDuplicateQueueSubscriptions:默認false,若是爲true,重複的訂閱關係一產生即被阻止
1四、bridgeTempDestinations:默認true,是否廣播advisory messages來建立臨時destination
1五、alwaysSyncSend:默認false,若是爲true,非持久化消息也將使用request/reply方式代替oneway方式發送到遠程broker
1六、staticBridge:默認false,若是爲true,只有staticallyIncludedDestinations中配置的destination能夠被處理網絡
3、「丟失」的消息
存在這樣的場景,broker1和broker2經過networkConnector鏈接,一些consumers鏈接到broker1,消費broker2上的消息。消息先被broker1從broke2上消費掉,而後轉發給這些consumers。不幸的是轉發部分消息的時候broker1重啓了,這些consumers發現broker1鏈接失敗,經過failover鏈接到broker2上去了,可是又一部分他們尚未消費的消息被broker2已經分發到broker1上去了。這些消息,就好像是消失了,除非有消費者從新鏈接到broker1上來消費。
從5.6版起,在destinationPolicy上新增的選項replayWhenNoConsumers。這個選項使得broker1上有須要轉發的消息可是沒有消費者時,把消息迴流到它原始的broker。同時把enableAudit設置爲false,爲了防止消息迴流後被當作重複消息而不被分發,示例以下:負載均衡
<destinationPolicy> <policyMap> <policyEntry queue=">" enableAudit="false"> <networkBridgeFilterFactory> <conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/> </networkBridgeFilterFactory> </policyEntry> </policyMap> </destinationPolicy>
4、容錯的鏈接dom
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory ("failover:(tcp://localhost:61616,tcp://localhost:61617) ?randomize=false");
5、動態網絡鏈接(純理論)
多播協議multicast
ActiveMQ使用Multicast協議將一個Service和其餘的Broker的Service鏈接起來。IP multicast是一個被用於網絡中傳輸數據到其餘一組接收者的技術。
IP multicast傳統的概念成爲組地址。組地址是ip地址在224.0.0.0到239.255.255.255之間的ip地址。ActiveMQ broker使用multicast協議去創建服務與遠程的broker的服務的網絡鏈接。tcp
基本的格式配置
multicast://ip address:port?transportOptions
一、group:表示惟一的組名稱,缺省值default
二、minmumWireFormatVersion:被容許的最小的wireformat版本,缺省爲0
三、trace:是否追蹤記錄日誌,默認false
四、useLocalHost:表示本地機器的名稱是否爲localhost,默認true
五、datagramSize:特定的數據大小,默認值41024
六、timeToLive:消息的聲明週期值,默認值-1
七、loopBackMode:是否啓用loopback模式,默認false
八、wireFormat:默認用wireFormat命名
九、wireFormat.:前綴是wireFormatide
配置示例
1:默認配置,默認狀況下是不可靠的多播,數據包可能會丟失
multicast://default
2:特定的ip和端口
multicast://224.1.2.3:6255
3:特定的ip和端口以及組名
multicast://224.1.2.3:6255?group=mygroupnameoop
ActiveMQ使用multicast協議的配置格式以下:測試
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="multicast" dataDirectory="${activemq.data}/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
Discovery協議
Discovery是在multicast協議的功能上定義的。功能相似與Failover功能。它將動態的發現multicast協議的broker的鏈接而且隨機的鏈接其中一個broker。
<broker name="foo"> <transportConnectors> <transportConnector uri="tcp://localhost:0" discoveryUri="multicast://default"/> </transportConnectors> </broker>
Peer協議
ActiveMQ提供了peer transport connector提供了更加容易的去嵌入broker網絡中。它建立一個優於vm鏈接的p2p網絡鏈接。默認格式以下:
peer://peergroup/brokerName?Key=value
Peer協議的基本使用
當咱們啓用了peer協議時,應用將自動的啓動內嵌broker,也將會自動的去配置其它broker來創建鏈接,前提是必需要有一個組。配置以下:
peer://groupa/broker1?Persistent=false
另外,生產者和消費者都各自鏈接到嵌入到本身應用的broker,而且在本地的同一個組名中相互訪問數據。
Fanout協議是同時鏈接到多個broker,默認的格式以下:
fanout:(fanoutURI)?key=value
示例:fanout:(static:(tcp://host1:61616,tcp://host2:61616))
表示client將試圖鏈接到兩個static列表中定義的三個URI