配置標準ActiveMQ組件--連接到ActiveMQ ._第1頁
配置標準ActiveMQ組件--連接到ActiveMQ ._第2頁
配置標準ActiveMQ組件--連接到ActiveMQ ._第3頁
配置標準ActiveMQ組件--連接到ActiveMQ ._第4頁
配置標準ActiveMQ組件--連接到ActiveMQ ._第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、使用ActiveMQ看起來很簡單直接:啟動它,發(fā)送消息,接收消息。但是你沒有看到隱藏在這些步驟后面的細節(jié)。理解這些細節(jié)和自定義配置需要更多的例子來說明。雖然ActiveMQ提供了大量的配置選項,但是理解一些核心的選項對于大多數(shù)應(yīng)用是很必要的。第二部分深入到ActiveMQ關(guān)鍵的配置選項,包括連接,消息持久化,安全。這三個主題是你使用ActiveMQ最先遇到的問題,所以率先理解它們很重要。第4章:連接到ActiveMQ 本章內(nèi)容: · ActiveMQ連接器URIs的描述和演示 · 客戶端如何使用傳輸連接器連接ActiveMQ · 如何使用網(wǎng)絡(luò)連接器創(chuàng)建一個集群Ac

2、tiveMQ消息代理器 ActiveMQ等JMS代理器的目的是為客戶端應(yīng)用提供一個交互的架構(gòu)。所以,ActiveMQ提供連接器(connectors)。連接器提供客戶端到代理器的交互(使用transport connectors),和代理器間的交互(使用network connectors)。ActiveMQ允許客戶端使用各種協(xié)議進行連接,同時也運行代理器間通過連接通道來形成復(fù)雜的連接器網(wǎng)絡(luò)。這章我們先解釋連接器URIs,它們是用來指明代理器的地址的。之后,我們介紹傳輸連接器(transport connectors)以及有哪些協(xié)議可以用來連接ActiveMQ代理器。注意: 我們這里會用到連接

3、器(connector)和協(xié)議(protocol)兩個概念。協(xié)議是一個通用的概念,而連接器是ActiveMQ特定的一個東西。每個ActiveMQ連接器,實現(xiàn)一個特定的協(xié)議,并用它來作為自己的名字。對于下面將的內(nèi)容要注意我們是在討論某個協(xié)議還是在討論一個特定的ActiveMQ連接器。我們先解釋如果配置傳輸連接器。然后,我們修改股票投資的例子,使之使用各種不同的連接器,并演示該例子。看完該例子后,我們移到特定的連接器,討論的傳輸連接器將包括TCP,SSL和HTTP。接下來,我們將介紹使用VM協(xié)議的嵌入式代理器。最后討論的是使用網(wǎng)絡(luò)連接器進行ActiveMQ集群的一些基本概念。我們將演示如果通過st

4、atic協(xié)議創(chuàng)建靜態(tài)的網(wǎng)絡(luò)連接器,以及客戶端如何通過failover協(xié)議穩(wěn)定地連接到這些網(wǎng)絡(luò)連接器上面。使用multicast和disvovery協(xié)議的動態(tài)連接器也會被討論。這一節(jié)只是介紹網(wǎng)絡(luò)連接器的一些基本的概念和協(xié)議,更多的內(nèi)容將放到第10章。4.1理解連接器URIs 在討論連接器細節(jié)和它們在ActiveMQ架構(gòu)的角色之前,理解連接器URIs很重要。統(tǒng)一資源定位符(Uniform resource identifiers),作為一個概念,并不新,而且你可能已經(jīng)多次使用過它們而沒有意識到而已。URIs第一次被引入來定位資源是在萬維網(wǎng)(World Wide Web)。規(guī)范(http:/mng.

5、bz/8iPP)對URI的定義是:一個用來標識抽象或物理資源的簡潔的字符串。因為URI的簡單和靈活,它已經(jīng)很多互聯(lián)網(wǎng)服務(wù)使用。Web URLs和email地址就是我們?nèi)粘S玫腢RI的兩個例子。我們不去深入討論URIs,不過必須簡要地講一下URI的結(jié)構(gòu)。這對于了解為什么ActiveMQ使用URI來定位連接器很有幫助?;镜?,每個URI都遵循下面的格式:<scheme>:<scheme-specific-part>考慮下面的URI:mailto:注意使用到了mailto 協(xié)議,跟著的是一個email地址唯一地標識了我們要用到的

6、服務(wù)和特定的資源。最常用的URIs是分層的URIs,它的格式如下:<scheme>:/<authority><path><?query>這類URI被瀏覽器用來標識網(wǎng)站。有一種類型的URI叫做URL(Uniform Resource Locator)。下面是一個例子:這個URL使用http協(xié)議并且使用path和query元素來指定額外的參數(shù)。因為URIs的簡單靈活,ActiveMQ使用它們來定位不同類型的各個連接器。如果你回去看第3章,你可以看到下面的URI被用來創(chuàng)建一個連接器。tcp:/localhost:61616這是一個典型的分層URI,它的

7、含義是“在本地61616端口創(chuàng)建一個TCP連接?!边@類使用簡單分層URI模式的連接器被叫做low-level連接器,它們被用來實現(xiàn)基礎(chǔ)的網(wǎng)絡(luò)交流協(xié)議。連接器URIs使用schema來表示當(dāng)前的網(wǎng)絡(luò)協(xié)議,path元素用來標識網(wǎng)絡(luò)資源(通常是地址和端口),query用來指定特殊的配置參數(shù)。圖4.1顯示了URI的結(jié)構(gòu)。這個URI擴展了前面的例子,它還告訴所有的代理器記錄所有的命令(trace=true部分)。這是TCP端口可選的一個參數(shù)。ActiveMQ的故障轉(zhuǎn)移傳輸機制支持自動重連。也即是說,如果一個代理器不在線,客戶端可以連到另一個代理器上。ActiveMQ通過使用復(fù)合URIs滿足這種需求。在圖

8、4.2,你可以看到一個這種URI。注意在scheme部分用到了static(static協(xié)議將在本章后面討論)并且scheme-specific部分用到了一個或多個地等級URIs。當(dāng)然,整個URI或者里面的低層次URI都可以包含查詢參數(shù)。注: 因為整個URI看起來比較復(fù)雜,所以用戶經(jīng)常會在中間插入空格以增強可讀性。這是不被允許的。因為URI規(guī)范及它的Java實現(xiàn)都這樣要求。所以請記得不要在URI中放任何空格?,F(xiàn)在你已經(jīng)了解了ActiveMQ URI基本知識,我們接下來可以討論ActiveMQ支持的連接器類型。本章接下來部分將討論傳輸連接器和網(wǎng)絡(luò)連接器以及如何配置它們。 4.2傳輸連接

9、器 為了交換信息,生產(chǎn)者和消費者必須連接到代理器。客戶端到代理器的連接是通過傳輸連接器來實現(xiàn)的。ActiveMQ提供了一些客戶端協(xié)議,可以用來交換信息。ActiveMQ用戶對連接的要求是多種多樣的。一些用戶關(guān)注性能,一些用戶關(guān)注安全或其它指標。ActiveMQ嘗試滿足所有這些要求,并對每一種使用場景提供一種連接器。在這一節(jié),你將學(xué)會在ActiveMQ配置文件中配置傳輸連接器,然后修改股票投資例子來演示這些連接器。接下來的章節(jié),我們將討論網(wǎng)絡(luò)連接器可用協(xié)議,并介紹內(nèi)嵌代理器和虛擬機協(xié)議。這兩個概念使得代理器可以在你的應(yīng)用中運行,這個主題將在第七章繼續(xù)討論。4.2.1配置傳輸連接器 對于代理器來說

10、,傳輸連接器是用來接受和監(jiān)聽客戶端連接的。如果你看一看ActiveMQ演示例子的配置文件(conf/activemq-demo.xml),你會看到類似如下的配置:<transportConnectors><transportConnector name="openwire" uri="tcp:/localhost:61616"discoveryUri="multicast:/default"/><transportConnector name="ssl" uri="ssl:/

11、localhost:61617"/><transportConnector name="stomp" uri="stomp:/localhost:61613"/><transportConnector name="xmpp" uri="xmpp:/localhost:61222"/></transportConnectors>你可以看到傳輸連接器定義在<transportConnectors>元素之間。你通過<transport-Connecto

12、r>元素定義特定的連接器。ActiveMQ可以不同的端口上設(shè)置不同協(xié)議的連接器。一個連接器必須有自己唯一的名字和URI屬性。在這個例子中,URI定義了網(wǎng)絡(luò)協(xié)議和可選參數(shù),通過它們,ActiveMQ將被曝露出來給客戶端連接。discoveryUri屬性是可選的,這個屬性將在4.3.1節(jié)講解。上面的片段定義了4個傳輸連接器。當(dāng)你通過使用這樣的配置文件啟動ActiveMQ,你將看到如下日志:INFO TransportServerThreadSupport - Listening for connections at:tcp:/localhost:61616INFO TransportConn

13、ector - Connector openwire StartedINFO TransportServerThreadSupport - Listening for connections at:ssl:/localhost:61617INFO TransportConnector - Connector ssl StartedINFO TransportServerThreadSupport - Listening for connections at:stomp:/localhost:61613INFO TransportConnector - Connector stomp Start

14、edINFO TransportServerThreadSupport - Listening for connections at:xmpp:/localhost:61222INFO TransportConnector - Connector xmpp Started從客戶端角度,傳輸連接器是一個連接,通過它可以向代理器發(fā)送和接收消息。發(fā)送和接收消息的內(nèi)容放在第七章。下面的代碼展示了java應(yīng)用如何使用傳輸連接器URIs。ActiveMQConnectionFactory factory =new ActiveMQConnectionFactory("tcp:/localhost

15、:61616 ");Connection connection = factory.createConnection();connection.start();Session session =connection.createSession(false, Session.AUTO_ACKNOWLEDGE);我們可以看到,在配置文件里定義的URI被客戶端用來創(chuàng)建連接。在這個例子中,TCP傳輸URI將被使用。注:我們可以在客戶端和服務(wù)器端是用URI的query部分。通常地,這些參數(shù)對于客戶端和服務(wù)器端都有用,但其中的一些只能用在某一部分。所以,在使用這些特定查詢參數(shù)前請先查看文檔說明。

16、理解了基本的傳輸連接器配置之后,我們應(yīng)該了解ActiveMQ提供了哪些類型的傳輸連接器。不過在我們講解特定傳輸連接器之前,我們先修改股票投資例子,讓它使用不同的傳輸連接器。4.2.2修改股票投資例子第三章引入了一個股票投資例子,它用ActiveMQ來發(fā)布和消費股票交易消息。當(dāng)時,我們使用標準的連接器URI,因為我們想讓這個例子看起來盡量簡單。這一章,我們將介紹所有的協(xié)議并同意股票投資例子來使用它們。所以,我們要修改該例子,讓它使用任意的協(xié)議工作。列表4.1是main()一個修改后的版本。Listing 4.1 Modifying stock portfolio publisher to sup

17、port various connector URIs前面的代碼保證連接器URI作為第一個參數(shù)被傳遞,并且剩下的參數(shù)是額外的目標的名稱。現(xiàn)在,生產(chǎn)者可以通過下面的命令來運行:$ mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch4.Publisher -Dexec.args="tcp:/localhost:61616 CSCO ORCL" .Sending: price=65.713356601409, stock=JAVA, offer=65.779069958011,up=trueon destinati

18、on: topic:/STOCKS.JAVASending: price=66.071605671946, stock=JAVA, offer=66.137677277617,up=trueon destination: topic:/STOCKS.JAVASending: price=65.929035001620, stock=JAVA, offer=65.994964036622,up=falseon destination: topic:/STOCKS.JAVA.注意到現(xiàn)在有三個參數(shù)被傳送給生產(chǎn)者。我們也可以用相同的方法來修改消費者。在下面的列表中,被修改后的消費者把第一個參數(shù)作為UR

19、I來使用。Listing 4.2 Modifying stock portfolio consumer to support various connector URIs為了達到和第三章相同的功能,你必須提供一個額外的URI參數(shù)。下面的例子展示了如何做:$ mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch4.Consumer -Dexec.args="tcp:/localhost:61616 CSCO ORCL" .ORCL 65.71 65.78 upORCL 66.07 66.14 upORCL 65.

20、93 65.99 downCSCO 23.30 23.33 up.注意,消息在生產(chǎn)者和消費者之間的流動是和原始例子一樣。通過這些修改,現(xiàn)在這個例子可以使用各種協(xié)議運行了?,F(xiàn)在我們應(yīng)該深入到特定的連接器里面了。下面的部分你將看到你通過網(wǎng)絡(luò)連接代理器有什么選擇。4.3通過網(wǎng)絡(luò)連接ActiveMQ ActiveMQ最常用的場景是將它作為一個Java應(yīng)用來使用。這意味著客戶端(生產(chǎn)者和消費者)必須使用一些網(wǎng)絡(luò)協(xié)議來連接代理器目標。在這一節(jié),我們將介紹那些可以用在客戶端-代理器交互場景中的網(wǎng)絡(luò)協(xié)議。我們先介紹TCP連接器,它最常用并且能提供理想的性能。然后是NIO連接器,它底層使用了TCP網(wǎng)絡(luò)協(xié)議,但因

21、為還用到了NIO Java API所以比TCP連接器有更好的伸縮性。UDP網(wǎng)絡(luò)協(xié)議也經(jīng)常被使用,所以UDP連接器也在討論清單里。UDP協(xié)議與TCP相比帶來一些性能的提升,但也損失了一些可靠性。UDP連接器也如此。因為UDP連接器的不可靠性,所以它使用的場景較少。SSL連接器能夠與代理器維持一個安全連接。最后,我們將向你展示如何使用HTTP連接代理器。當(dāng)然,在每一部分我們會討論各種連接器的利弊。所以,你也可以考慮只閱讀你感興趣的部分,然后直接跳過去閱讀下一章。表4.1包含了各種連接器的一個簡要描述。現(xiàn)在讓我們開始默認的TCP協(xié)議。4.3.1 傳輸控制協(xié)議(TCP) 現(xiàn)在對人們來說,TCP協(xié)議可能

22、和電力一樣重要。作為一個基礎(chǔ)的因特網(wǎng)協(xié)議,幾乎所有的在線交流都用到它。像email和web等很多服務(wù)都使用它作為底層的網(wǎng)絡(luò)協(xié)議。希望你己經(jīng)對TCP基本信息有了了解,我們將從引述RFC793協(xié)議開始。(http:/mng.bz/Bns2):Transmission Control Protocol(TCP)是為分組交換主機及內(nèi)部系統(tǒng)間交換提供可靠的網(wǎng)絡(luò)而設(shè)計的。既然代理器和客戶端應(yīng)用是需要通過可靠的網(wǎng)絡(luò)來交換的,那么很容易理解為什么TCP對于JMS實現(xiàn)來說是一個理想的協(xié)議。所以,TCP作為ActiveMQ最常用的連接器并不讓人感到意外。在通過網(wǎng)絡(luò)交換消息前,需要先把消息序列化成合適的形式。使用w

23、ire協(xié)議,消息被序列化成字節(jié)序列在電線上發(fā)送。ActiveMQ使用的默認wire協(xié)議叫做OpenWire。該協(xié)議規(guī)范可以在ActiveMQ網(wǎng)站找到(http:/mng.bz/u2eT).OpenWire協(xié)議不止可以用在TCP網(wǎng)絡(luò)傳輸,也可以用在其它網(wǎng)絡(luò)協(xié)議上。它的目的是高效地,并且允許在網(wǎng)絡(luò)上快速交換數(shù)據(jù)。還有,像OpenWire這樣一個標準的,開放的協(xié)議能夠在各種編程環(huán)境中被使用。這個協(xié)議和其它ActiveMQ可用的wire協(xié)議將在第九章討論。就像我們在前面章節(jié)看到的,一個默認的代理器配置會在端口61616上監(jiān)聽客戶端的TCP傳輸連接。TCP連接器URI使用下面的語法:tcp:/hostn

24、ame:port ?key=value&key=value注意黑體字部分是必需的。在問號右邊的key value對是可選的,并且各組key,value間用&符號分隔。在本節(jié)或之后,我們不會完整地討論該傳輸協(xié)議的所有可選的部分。這些東西應(yīng)該放到網(wǎng)上的參考頁面。最新的TCP連接器參考頁是(http:/mng.bz/ngU2)。下面的配置片段提供了一個使用TCP連接器的例子:<transportConnectors><transportConnector name="tcp"uri="tcp:/localhost:61616?trace

25、=true"/></transportConnectors>注意到trace選項可以被添加到URI后面。這個選項建議代理器記錄所有通過該連接器發(fā)送過來的命令,這對調(diào)試非常有幫助。重要提示 :修改配置文件后,ActiveMQ必須重啟才能生效。上面的內(nèi)容概述了客戶端使用TCP連接代理器。作為參考,下面的例子演示了消費者如何使用TCP連接器。$ mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch4.Consumer -Dexec.args="tcp:/localhost:61616 CSCO OR

26、CL"ORCL 65.71 65.78 upORCL 66.07 66.14 upORCL 65.93 65.99 downCSCO 23.30 23.33 up.使用TCP連接器的好處有:· 高效-這個連接器使用OpenWire協(xié)議將消息轉(zhuǎn)換成字節(jié)流,所以在網(wǎng)絡(luò)上傳輸非常高效。 · 可用-TCP是使用最廣的一種網(wǎng)絡(luò)協(xié)議,而且在很久前就被Java所支持。所以,該協(xié)議幾乎可以支持你選擇的所有平臺。 · 可靠性-TCP協(xié)議保證消息不會丟失。  4.3.2 新I/O API 協(xié)議(New I/O API Protocol 

27、;,NIO)NIO是在Java SE1.4規(guī)范中定義的Java標準I/O API。NIO并不是想取代傳統(tǒng)Java I/O API的地位,而是提供了一種可替代的用于網(wǎng)絡(luò)編程和訪問操作系統(tǒng)底層I/O操作的方法。NIO的特點在于NIO selectors和無阻塞I/O編程,使得開發(fā)者使用同一網(wǎng)絡(luò)資源解決更多的網(wǎng)絡(luò)客戶端連接,并在服務(wù)之間平衡負載。從使用者的角度來看,NIO傳輸連接器與TCP傳輸連接器沒有什么必然區(qū)別,NIO在底層也使用TCP協(xié)議,并且也是用OpenWire作為消息串行化包裝協(xié)議。唯一的區(qū)別在于底層實現(xiàn)的不同,NIO傳輸連接器是使用NIO API實現(xiàn)的。NOI傳輸連接器的使用場景:1.

28、       您需要有大量的客戶端連接到JMS中介。一般來說,能夠連接到中介的客戶端的數(shù)量取決于操作系統(tǒng)支持的線程數(shù)量的上限。由于NIO連接器的實現(xiàn)與TCP連接器相比啟動了更少的線程,如果使用TCP不能夠滿足您的需要時,請考慮使用NIO。2.       您的中介需要大量的網(wǎng)絡(luò)傳輸。NIO連接器與TCP連接器相比,效能上會更高一些,因為NIO占用更少的資源。需要注意的是,ActiveMQ的效能調(diào)節(jié)不能簡單的通過使用哪個連接器就能完成。其他很多方面會影響到A

29、ctiveMQ的性能調(diào)節(jié),例如,正確的選擇網(wǎng)絡(luò)拓撲,為brokers設(shè)置多種選項,消息發(fā)送者和消費者的操作等。配置NIO如下:nio:/hostname:port?key=value一個配置的例子:<transportonnector           Name=”tcp”           Uri=”tcp:/localhost:61616?trace=true”/

30、><transportConnector           Name=”nio”           Uri=”nio:/localhost:61618?trace=true”/></transportConnectors> 下面給出一個發(fā)布者和消費者的示例,如下圖:從圖中看出消息發(fā)布者和消費者可以采用不同的網(wǎng)絡(luò)連接器。消息發(fā)布者使用n

31、io發(fā)布消息,消息消費者使用tcp消費消息。4.3.3 用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol ,UDP)UDP與TCP的區(qū)別:1    TCP是一種面向流的協(xié)議,這意味著數(shù)據(jù)包的順序?qū)⒌玫奖WC。換句話說,數(shù)據(jù)報不可能出現(xiàn)重復(fù)和亂序接收的現(xiàn)象。UDP不能保證數(shù)據(jù)包的有序接收,也不能保證數(shù)據(jù)包的重復(fù)發(fā)送。2    TCP可以保證數(shù)據(jù)報可靠的傳輸,意味著數(shù)據(jù)報在傳輸過程中不會出現(xiàn)丟失。這是通過在發(fā)送者和接收者之間管理一個活躍連接完成的。UDP是一種無連接的協(xié)議,不能保證數(shù)據(jù)報的完整傳輸。

32、TCP用于可靠的數(shù)據(jù)傳輸,而UDP用于快速的數(shù)據(jù)傳輸。你可以使用UDP連接到ActiveMQ。語法如下:Udp:/hostname:port?key=value TCP和UDP傳輸連接器的比較:UDP的優(yōu)勢:1.       代理安裝在防火墻后面,防火墻不允許使用TCP,這種情況您只能使用UDP。2.       應(yīng)用是時間敏感的,您想盡量消除網(wǎng)絡(luò)延時。UDP的劣勢:1.      &#

33、160;UDP是不可靠的,您可能丟失一些消息,所以您的應(yīng)用程序應(yīng)當(dāng)解決這種消息丟失的情況。2.       在客戶端和JMS中介之間傳遞的消息不單單是普通消息,這里還夾雜著控制命令,如果一些控制命令由于UDP的不可靠丟失,那么JMS連接是危險的。所以你必須提供一層可靠的傳輸確??刂葡⒌恼_傳輸。配置示例如下:<transportonnector           Name=”tcp”  

34、         Uri=”tcp:/localhost:61616?trace=true”/><transportConnector           Name=”udp”           Uri=”udp:/localhost:61618?trace=true”/&g

35、t;</transportConnectors>4.3.4 安全套接字層協(xié)議(secure socket layer protocol,ssl)使用TCP傳輸普通數(shù)據(jù)是不安全的,為了確保數(shù)據(jù)傳輸?shù)陌踩孕枰褂肧ecure Sockets Layer(SSL)協(xié)議。SSL協(xié)議在TCP協(xié)議的基礎(chǔ)上傳輸加密的安全數(shù)據(jù)。它使用一組密鑰(公鑰和私鑰)確保傳輸通道的安全性。ActiveMQ提供了SSL傳輸連接器,SSL傳輸連接器在客戶端和代理之間的TCP連接通道上添加了一層加密協(xié)議。語法如下:ssl:/hostname:port?key=value由于SSL傳輸是基于TCP實現(xiàn)的,

36、所有配置上也和TCP很相似。在默認的情況下SSL的端口號是61617。配置示例如下:<transportonnector           Name=”tcp”           Uri=”tcp:/localhost:61616?trace=true”/><transportConnector     &

37、#160;     Name=”ssl”           Uri=”ssl:/localhost:61617?trace=true”/></transportConnectors>需要特別注意的是SSL需要一個證書和密鑰。具體內(nèi)容參考原版ActiveMQ in Action第100頁。略。4.3.5 超文本傳輸協(xié)議(HTTP/HTTPS)在一些環(huán)境下,防火墻僅允許使用一些基礎(chǔ)的協(xié)議訪問。這是HTTP協(xié)議出

38、現(xiàn)的原因。ActiveMQ實現(xiàn)了HTTP傳輸連接器,能夠提供基于xml的消息傳輸??梢允褂肏TTP協(xié)議繞過防火墻。語法如下:http:/hostname:port?key=valuehttps:/hostname:port?key=value示例:<transportConnectors><transportonnector           Name=”tcp”        

39、0;  Uri=”tcp:/localhost:61616?trace=true”/><transportConnector           Name=”http”           Uri=”http:/localhost:8080?trace=true”/></transportConnectors>略。4.4

40、0;使用虛擬機協(xié)議(Virtual Machine Protocol, VM)前面討論的都是客戶端通過網(wǎng)絡(luò)協(xié)議連接到中介。ActiveMQ可以內(nèi)嵌到Java應(yīng)用程序中,這就允許客戶端與中介之間的交互通過本地JVM完成,而不是通過網(wǎng)絡(luò)。為了支持這種VM內(nèi)部通信,ActiveMQ提供了VM協(xié)議。4.4.1 VM協(xié)議Java應(yīng)用程序使用VM傳輸連接器加載一個內(nèi)嵌的中介代理并且與之連接。使用VM表示在客戶端和內(nèi)嵌的中介之間不需要網(wǎng)絡(luò)連接,通信是直接使用方法調(diào)用的形式。由于不使用網(wǎng)絡(luò)協(xié)議棧,效能會得到明顯的提高。當(dāng)?shù)谝粋€連接使用VM協(xié)議被創(chuàng)建時中介被開啟。同一虛擬機的后續(xù)的VM傳輸連接都會連接到同一個中

41、介。使用VM協(xié)議創(chuàng)建的中介具有獨立ActiveMQ的所有特性,并且這個中介也可以被其他的傳輸連接配置。當(dāng)所有的連接到這個VM傳輸連接代理的連接都結(jié)束后,中介代理將會自動關(guān)閉。語法如下:vm:/brokerName?key=valueVM 的代理名字在這里起到了至關(guān)重要的作用,用于標識一個中介。例如,您可以通過指定特定的中介名字創(chuàng)建不同的內(nèi)嵌代理。不同的內(nèi)嵌代理名字必須不同。VM傳輸協(xié)議配置屬性中與其他連接不同之處在于,可以通過參數(shù)來調(diào)節(jié)代理性能。以Broker.開頭的屬性用于調(diào)節(jié)中介的性能。例如下面的配置終止持久化:Vm:/broker1?marshal=false&brok

42、er.persistent=false可替代的URI語法:Vm:broker(transprotURI,network:networkURI)/brokerName?key=value實例如下:Vm:broker:(tcp:/localhost:6000)?brokerName=embeddedbroker&persistent=false上例中我們定義了一個名字為embeddedBroker的內(nèi)嵌中介,并且配置了TCP傳輸連接在端口6000進行監(jiān)聽。最后取消了代理的持久化。如下圖所示: 上圖給出了客戶端可以通過TCP連接到一個內(nèi)嵌的代理。可以通過配置文件對內(nèi)嵌代理進行配置,

43、然后進行引用,如下:Vm:/localhost?brokerConfig=xbean:activemq.xml這個例子將會從classpath使用XBean協(xié)議加載activemq.xml文件配置內(nèi)嵌代理。使用內(nèi)嵌代理的一個明顯好處就是改進了客戶端和代理之間的通信。并且您的Java應(yīng)用僅需要一個應(yīng)用程序(一個jvm中)而不是兩個(獨立運行ActiveMQ時,ActiveMQ自身是一個Java應(yīng)用程序),簡化您的程序配置過程。同時也意味著減少一個Java處理過程。另一方面,如果很多的Java應(yīng)用程序使用一個內(nèi)嵌的代理,管理問題可能就會出現(xiàn)。這種情況應(yīng)當(dāng)使用單獨的集群式代理而不是內(nèi)嵌代理。4.3&

44、#160;配置網(wǎng)絡(luò)連接器(Network Connectors)當(dāng)應(yīng)用程序具有大規(guī)模和高可用性需求時,最好使用網(wǎng)絡(luò)代理(Network of brokers)。一個網(wǎng)絡(luò)代理創(chuàng)建一個有多個ActiveMQ實例組成的集群系統(tǒng),他們之間連接完成復(fù)雜的消息使用場景。前面討論的是由客戶端和代理之間的連接,這里強調(diào)的是代理與代理之間的連接。默認的網(wǎng)絡(luò)連接通道是單向的。同時ActiveMQ也支持雙向的通道。如下圖所示: 網(wǎng)絡(luò)連接器的配置是通過對ActiveMQ的xml文檔進行配置完成的,如下所示:網(wǎng)絡(luò)連接器有一個重要概念叫發(fā)現(xiàn)(Discovery)。發(fā)現(xiàn)就是探測遠程的代理服務(wù)的過程??蛻舳私?jīng)常想要

45、發(fā)現(xiàn)可用代理。代理本身也想發(fā)現(xiàn)其他的可用代理,這樣就可以創(chuàng)建網(wǎng)絡(luò)(集群式)代理了。有兩種形式的方法配置和連接客戶端到網(wǎng)絡(luò)代理。一種方法是客戶端使用靜態(tài)的方法配置訪問特定的網(wǎng)絡(luò)代理。另外一種方法是代理或者客戶端可以使用發(fā)現(xiàn)中介(agents)動態(tài)的探測代理。4.4 定義靜態(tài)的網(wǎng)絡(luò)代理(static Networks)靜態(tài)網(wǎng)絡(luò)代理連接要求您知道您需要使用的網(wǎng)絡(luò)代理的URIs列表。4.4.1 靜態(tài)協(xié)議(static Protocol)靜態(tài)網(wǎng)絡(luò)連接器(static Network connector)用來為多代理創(chuàng)建靜態(tài)的連接。這些協(xié)議使用組合URI  即,一個URI中包

46、含了其他的URIs。組合URI中包含了多個代理的地址(URIs)。語法如下:Static:(uri1,uri2,uri3,)?key=value下面給出一個配置實例:<networkConnectors>         <networkConnector name=”local network”                &

47、#160;  Uri=”static:/(tcp:/remotehost1:61616,tcp:/remotehost2:61616)”/></networkConnectors>假設(shè),您使用的Broker為localhost,并且remotehost1和remotehost2這兩個Broker已經(jīng)開啟。輸出信息如下: 上面的輸出表明:localhost已經(jīng)成功的與其他兩個代理之間創(chuàng)建了轉(zhuǎn)送橋接(forwarding bridge),換句話說,發(fā)往本地代理的消息將會轉(zhuǎn)發(fā)到遠程主機1和遠程主機2。4.4.2 Failover Protocol到目前

48、為止,客戶端都是連接到一個指定的代理。但是如果指定代理不可用該如何處理。可以有兩種可用的方案。第一種方案是,你提供一個靜態(tài)的可用代理鏈表,使用failover transport connector。另外一種方案是,動態(tài)的去發(fā)現(xiàn)可用的代理。語法:Failover:(uri1, , uriN)?key=value或者:Failover:uri1, ,uriN)在默認情況下會采用一種隨機算法選取一個連接器進行鏈接。如果一個出現(xiàn)錯誤,那么連接器會選擇另外一個連接器進行鏈接。默認的連接采用一種重連接延遲邏輯(reconnection delay logic),意味著,一個連接失敗后將延遲10ms重新啟

49、動,之后將以30000ms重新嘗試。重試連接將是無限此的。當(dāng)然您可以使用相應(yīng)的參數(shù)來配置重新連接。4.5 定義動態(tài)網(wǎng)絡(luò)(Dynamic networks)4.5.1 多播協(xié)議(Multicast Protocol)ActiveMQ代理使用多播協(xié)議使本地的服務(wù)和代理創(chuàng)建網(wǎng)絡(luò)代理??蛻舳丝梢允褂枚嗖f(xié)議定位本地代理并創(chuàng)建連接。語法:Muticast:/ipaddress:port?key=value實例:<broker xmlns=/schema/core brokerName=”multicast” 

50、            dataDirectory=”$activema.base/data”>         <networkConnectors>                   <networkConnector name=”default-nc” uri=”multicast:/default”/>   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論