版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、使用ActiveMQ看起來很簡單直接:啟動(dòng)它,發(fā)送消息,接收消息。但是你沒有看到隱藏在這些步驟后面的細(xì)節(jié)。理解這些細(xì)節(jié)和自定義配置需要更多的例子來說明。雖然ActiveMQ提供了大量的配置選項(xiàng),但是理解一些核心的選項(xiàng)對于大多數(shù)應(yīng)用是很必要的。第二部分深入到ActiveMQ關(guān)鍵的配置選項(xiàng),包括連接,消息持久化,安全。這三個(gè)主題是你使用ActiveMQ最先遇到的問題,所以率先理解它們很重要。第4章:連接到ActiveMQ 本章內(nèi)容: · ActiveMQ連接器URIs的描述和演示 · 客戶端如何使用傳輸連接器連接ActiveMQ · 如何使用網(wǎng)絡(luò)連接器創(chuàng)建一個(gè)集群Ac
2、tiveMQ消息代理器 ActiveMQ等JMS代理器的目的是為客戶端應(yīng)用提供一個(gè)交互的架構(gòu)。所以,ActiveMQ提供連接器(connectors)。連接器提供客戶端到代理器的交互(使用transport connectors),和代理器間的交互(使用network connectors)。ActiveMQ允許客戶端使用各種協(xié)議進(jìn)行連接,同時(shí)也運(yùn)行代理器間通過連接通道來形成復(fù)雜的連接器網(wǎng)絡(luò)。這章我們先解釋連接器URIs,它們是用來指明代理器的地址的。之后,我們介紹傳輸連接器(transport connectors)以及有哪些協(xié)議可以用來連接ActiveMQ代理器。注意: 我們這里會(huì)用到連接
3、器(connector)和協(xié)議(protocol)兩個(gè)概念。協(xié)議是一個(gè)通用的概念,而連接器是ActiveMQ特定的一個(gè)東西。每個(gè)ActiveMQ連接器,實(shí)現(xiàn)一個(gè)特定的協(xié)議,并用它來作為自己的名字。對于下面將的內(nèi)容要注意我們是在討論某個(gè)協(xié)議還是在討論一個(gè)特定的ActiveMQ連接器。我們先解釋如果配置傳輸連接器。然后,我們修改股票投資的例子,使之使用各種不同的連接器,并演示該例子。看完該例子后,我們移到特定的連接器,討論的傳輸連接器將包括TCP,SSL和HTTP。接下來,我們將介紹使用VM協(xié)議的嵌入式代理器。最后討論的是使用網(wǎng)絡(luò)連接器進(jìn)行ActiveMQ集群的一些基本概念。我們將演示如果通過st
4、atic協(xié)議創(chuàng)建靜態(tài)的網(wǎng)絡(luò)連接器,以及客戶端如何通過failover協(xié)議穩(wěn)定地連接到這些網(wǎng)絡(luò)連接器上面。使用multicast和disvovery協(xié)議的動(dòng)態(tài)連接器也會(huì)被討論。這一節(jié)只是介紹網(wǎng)絡(luò)連接器的一些基本的概念和協(xié)議,更多的內(nèi)容將放到第10章。4.1理解連接器URIs 在討論連接器細(xì)節(jié)和它們在ActiveMQ架構(gòu)的角色之前,理解連接器URIs很重要。統(tǒng)一資源定位符(Uniform resource identifiers),作為一個(gè)概念,并不新,而且你可能已經(jīng)多次使用過它們而沒有意識(shí)到而已。URIs第一次被引入來定位資源是在萬維網(wǎng)(World Wide Web)。規(guī)范(http:/mng.
5、bz/8iPP)對URI的定義是:一個(gè)用來標(biāo)識(shí)抽象或物理資源的簡潔的字符串。因?yàn)閁RI的簡單和靈活,它已經(jīng)很多互聯(lián)網(wǎng)服務(wù)使用。Web URLs和email地址就是我們?nèi)粘S玫腢RI的兩個(gè)例子。我們不去深入討論URIs,不過必須簡要地講一下URI的結(jié)構(gòu)。這對于了解為什么ActiveMQ使用URI來定位連接器很有幫助?;镜兀總€(gè)URI都遵循下面的格式:<scheme>:<scheme-specific-part>考慮下面的URI:mailto:注意使用到了mailto 協(xié)議,跟著的是一個(gè)email地址唯一地標(biāo)識(shí)了我們要用到的
6、服務(wù)和特定的資源。最常用的URIs是分層的URIs,它的格式如下:<scheme>:/<authority><path><?query>這類URI被瀏覽器用來標(biāo)識(shí)網(wǎng)站。有一種類型的URI叫做URL(Uniform Resource Locator)。下面是一個(gè)例子:這個(gè)URL使用http協(xié)議并且使用path和query元素來指定額外的參數(shù)。因?yàn)閁RIs的簡單靈活,ActiveMQ使用它們來定位不同類型的各個(gè)連接器。如果你回去看第3章,你可以看到下面的URI被用來創(chuàng)建一個(gè)連接器。tcp:/localhost:61616這是一個(gè)典型的分層URI,它的
7、含義是“在本地61616端口創(chuàng)建一個(gè)TCP連接?!边@類使用簡單分層URI模式的連接器被叫做low-level連接器,它們被用來實(shí)現(xiàn)基礎(chǔ)的網(wǎng)絡(luò)交流協(xié)議。連接器URIs使用schema來表示當(dāng)前的網(wǎng)絡(luò)協(xié)議,path元素用來標(biāo)識(shí)網(wǎng)絡(luò)資源(通常是地址和端口),query用來指定特殊的配置參數(shù)。圖4.1顯示了URI的結(jié)構(gòu)。這個(gè)URI擴(kuò)展了前面的例子,它還告訴所有的代理器記錄所有的命令(trace=true部分)。這是TCP端口可選的一個(gè)參數(shù)。ActiveMQ的故障轉(zhuǎn)移傳輸機(jī)制支持自動(dòng)重連。也即是說,如果一個(gè)代理器不在線,客戶端可以連到另一個(gè)代理器上。ActiveMQ通過使用復(fù)合URIs滿足這種需求。在圖
8、4.2,你可以看到一個(gè)這種URI。注意在scheme部分用到了static(static協(xié)議將在本章后面討論)并且scheme-specific部分用到了一個(gè)或多個(gè)地等級URIs。當(dāng)然,整個(gè)URI或者里面的低層次URI都可以包含查詢參數(shù)。注: 因?yàn)檎麄€(gè)URI看起來比較復(fù)雜,所以用戶經(jīng)常會(huì)在中間插入空格以增強(qiáng)可讀性。這是不被允許的。因?yàn)閁RI規(guī)范及它的Java實(shí)現(xiàn)都這樣要求。所以請記得不要在URI中放任何空格。現(xiàn)在你已經(jīng)了解了ActiveMQ URI基本知識(shí),我們接下來可以討論ActiveMQ支持的連接器類型。本章接下來部分將討論傳輸連接器和網(wǎng)絡(luò)連接器以及如何配置它們。 4.2傳輸連接
9、器 為了交換信息,生產(chǎn)者和消費(fèi)者必須連接到代理器??蛻舳说酱砥鞯倪B接是通過傳輸連接器來實(shí)現(xiàn)的。ActiveMQ提供了一些客戶端協(xié)議,可以用來交換信息。ActiveMQ用戶對連接的要求是多種多樣的。一些用戶關(guān)注性能,一些用戶關(guān)注安全或其它指標(biāo)。ActiveMQ嘗試滿足所有這些要求,并對每一種使用場景提供一種連接器。在這一節(jié),你將學(xué)會(huì)在ActiveMQ配置文件中配置傳輸連接器,然后修改股票投資例子來演示這些連接器。接下來的章節(jié),我們將討論網(wǎng)絡(luò)連接器可用協(xié)議,并介紹內(nèi)嵌代理器和虛擬機(jī)協(xié)議。這兩個(gè)概念使得代理器可以在你的應(yīng)用中運(yùn)行,這個(gè)主題將在第七章繼續(xù)討論。4.2.1配置傳輸連接器 對于代理器來說
10、,傳輸連接器是用來接受和監(jiān)聽客戶端連接的。如果你看一看ActiveMQ演示例子的配置文件(conf/activemq-demo.xml),你會(huì)看到類似如下的配置:<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é)議的連接器。一個(gè)連接器必須有自己唯一的名字和URI屬性。在這個(gè)例子中,URI定義了網(wǎng)絡(luò)協(xié)議和可選參數(shù),通過它們,ActiveMQ將被曝露出來給客戶端連接。discoveryUri屬性是可選的,這個(gè)屬性將在4.3.1節(jié)講解。上面的片段定義了4個(gè)傳輸連接器。當(dāng)你通過使用這樣的配置文件啟動(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從客戶端角度,傳輸連接器是一個(gè)連接,通過它可以向代理器發(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)建連接。在這個(gè)例子中,TCP傳輸U(kuò)RI將被使用。注:我們可以在客戶端和服務(wù)器端是用URI的query部分。通常地,這些參數(shù)對于客戶端和服務(wù)器端都有用,但其中的一些只能用在某一部分。所以,在使用這些特定查詢參數(shù)前請先查看文檔說明。
16、理解了基本的傳輸連接器配置之后,我們應(yīng)該了解ActiveMQ提供了哪些類型的傳輸連接器。不過在我們講解特定傳輸連接器之前,我們先修改股票投資例子,讓它使用不同的傳輸連接器。4.2.2修改股票投資例子第三章引入了一個(gè)股票投資例子,它用ActiveMQ來發(fā)布和消費(fèi)股票交易消息。當(dāng)時(shí),我們使用標(biāo)準(zhǔn)的連接器URI,因?yàn)槲覀兿胱屵@個(gè)例子看起來盡量簡單。這一章,我們將介紹所有的協(xié)議并同意股票投資例子來使用它們。所以,我們要修改該例子,讓它使用任意的協(xié)議工作。列表4.1是main()一個(gè)修改后的版本。Listing 4.1 Modifying stock portfolio publisher to sup
17、port various connector URIs前面的代碼保證連接器URI作為第一個(gè)參數(shù)被傳遞,并且剩下的參數(shù)是額外的目標(biāo)的名稱?,F(xiàn)在,生產(chǎn)者可以通過下面的命令來運(yù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)在有三個(gè)參數(shù)被傳送給生產(chǎn)者。我們也可以用相同的方法來修改消費(fèi)者。在下面的列表中,被修改后的消費(fèi)者把第一個(gè)參數(shù)作為UR
19、I來使用。Listing 4.2 Modifying stock portfolio consumer to support various connector URIs為了達(dá)到和第三章相同的功能,你必須提供一個(gè)額外的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)者和消費(fèi)者之間的流動(dòng)是和原始例子一樣。通過這些修改,現(xiàn)在這個(gè)例子可以使用各種協(xié)議運(yùn)行了。現(xiàn)在我們應(yīng)該深入到特定的連接器里面了。下面的部分你將看到你通過網(wǎng)絡(luò)連接代理器有什么選擇。4.3通過網(wǎng)絡(luò)連接ActiveMQ ActiveMQ最常用的場景是將它作為一個(gè)Java應(yīng)用來使用。這意味著客戶端(生產(chǎn)者和消費(fèi)者)必須使用一些網(wǎng)絡(luò)協(xié)議來連接代理器目標(biāo)。在這一節(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連接器也如此。因?yàn)閁DP連接器的不可靠性,所以它使用的場景較少。SSL連接器能夠與代理器維持一個(gè)安全連接。最后,我們將向你展示如何使用HTTP連接代理器。當(dāng)然,在每一部分我們會(huì)討論各種連接器的利弊。所以,你也可以考慮只閱讀你感興趣的部分,然后直接跳過去閱讀下一章。表4.1包含了各種連接器的一個(gè)簡要描述?,F(xiàn)在讓我們開始默認(rèn)的TCP協(xié)議。4.3.1 傳輸控制協(xié)議(TCP) 現(xiàn)在對人們來說,TCP協(xié)議可能
22、和電力一樣重要。作為一個(gè)基礎(chǔ)的因特網(wǎng)協(xié)議,幾乎所有的在線交流都用到它。像email和web等很多服務(wù)都使用它作為底層的網(wǎng)絡(luò)協(xié)議。希望你己經(jīng)對TCP基本信息有了了解,我們將從引述RFC793協(xié)議開始。(http:/mng.bz/Bns2):Transmission Control Protocol(TCP)是為分組交換主機(jī)及內(nèi)部系統(tǒng)間交換提供可靠的網(wǎng)絡(luò)而設(shè)計(jì)的。既然代理器和客戶端應(yīng)用是需要通過可靠的網(wǎng)絡(luò)來交換的,那么很容易理解為什么TCP對于JMS實(shí)現(xiàn)來說是一個(gè)理想的協(xié)議。所以,TCP作為ActiveMQ最常用的連接器并不讓人感到意外。在通過網(wǎng)絡(luò)交換消息前,需要先把消息序列化成合適的形式。使用w
23、ire協(xié)議,消息被序列化成字節(jié)序列在電線上發(fā)送。ActiveMQ使用的默認(rèn)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這樣一個(gè)標(biāo)準(zhǔn)的,開放的協(xié)議能夠在各種編程環(huán)境中被使用。這個(gè)協(xié)議和其它ActiveMQ可用的wire協(xié)議將在第九章討論。就像我們在前面章節(jié)看到的,一個(gè)默認(rèn)的代理器配置會(huì)在端口61616上監(jiān)聽客戶端的TCP傳輸連接。TCP連接器URI使用下面的語法:tcp:/hostn
24、ame:port ?key=value&key=value注意黑體字部分是必需的。在問號右邊的key value對是可選的,并且各組key,value間用&符號分隔。在本節(jié)或之后,我們不會(huì)完整地討論該傳輸協(xié)議的所有可選的部分。這些東西應(yīng)該放到網(wǎng)上的參考頁面。最新的TCP連接器參考頁是(http:/mng.bz/ngU2)。下面的配置片段提供了一個(gè)使用TCP連接器的例子:<transportConnectors><transportConnector name="tcp"uri="tcp:/localhost:61616?trace
25、=true"/></transportConnectors>注意到trace選項(xiàng)可以被添加到URI后面。這個(gè)選項(xiàng)建議代理器記錄所有通過該連接器發(fā)送過來的命令,這對調(diào)試非常有幫助。重要提示 :修改配置文件后,ActiveMQ必須重啟才能生效。上面的內(nèi)容概述了客戶端使用TCP連接代理器。作為參考,下面的例子演示了消費(fèi)者如何使用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連接器的好處有:· 高效-這個(gè)連接器使用OpenWire協(xié)議將消息轉(zhuǎn)換成字節(jié)流,所以在網(wǎng)絡(luò)上傳輸非常高效。 · 可用-TCP是使用最廣的一種網(wǎng)絡(luò)協(xié)議,而且在很久前就被Java所支持。所以,該協(xié)議幾乎可以支持你選擇的所有平臺(tái)。 · 可靠性-TCP協(xié)議保證消息不會(huì)丟失。 4.3.2 新I/O API 協(xié)議(New I/O API Protocol
27、;,NIO)NIO是在Java SE1.4規(guī)范中定義的Java標(biāo)準(zhǔn)I/O API。NIO并不是想取代傳統(tǒng)Java I/O API的地位,而是提供了一種可替代的用于網(wǎng)絡(luò)編程和訪問操作系統(tǒng)底層I/O操作的方法。NIO的特點(diǎn)在于NIO selectors和無阻塞I/O編程,使得開發(fā)者使用同一網(wǎng)絡(luò)資源解決更多的網(wǎng)絡(luò)客戶端連接,并在服務(wù)之間平衡負(fù)載。從使用者的角度來看,NIO傳輸連接器與TCP傳輸連接器沒有什么必然區(qū)別,NIO在底層也使用TCP協(xié)議,并且也是用OpenWire作為消息串行化包裝協(xié)議。唯一的區(qū)別在于底層實(shí)現(xiàn)的不同,NIO傳輸連接器是使用NIO API實(shí)現(xiàn)的。NOI傳輸連接器的使用場景:1.
28、 您需要有大量的客戶端連接到JMS中介。一般來說,能夠連接到中介的客戶端的數(shù)量取決于操作系統(tǒng)支持的線程數(shù)量的上限。由于NIO連接器的實(shí)現(xiàn)與TCP連接器相比啟動(dòng)了更少的線程,如果使用TCP不能夠滿足您的需要時(shí),請考慮使用NIO。2. 您的中介需要大量的網(wǎng)絡(luò)傳輸。NIO連接器與TCP連接器相比,效能上會(huì)更高一些,因?yàn)镹IO占用更少的資源。需要注意的是,ActiveMQ的效能調(diào)節(jié)不能簡單的通過使用哪個(gè)連接器就能完成。其他很多方面會(huì)影響到A
29、ctiveMQ的性能調(diào)節(jié),例如,正確的選擇網(wǎng)絡(luò)拓?fù)?,為brokers設(shè)置多種選項(xiàng),消息發(fā)送者和消費(fèi)者的操作等。配置NIO如下:nio:/hostname:port?key=value一個(gè)配置的例子:<transportonnector Name=”tcp” Uri=”tcp:/localhost:61616?trace=true”/
30、><transportConnector Name=”nio” Uri=”nio:/localhost:61618?trace=true”/></transportConnectors> 下面給出一個(gè)發(fā)布者和消費(fèi)者的示例,如下圖:從圖中看出消息發(fā)布者和消費(fèi)者可以采用不同的網(wǎng)絡(luò)連接器。消息發(fā)布者使用n
31、io發(fā)布消息,消息消費(fèi)者使用tcp消費(fèi)消息。4.3.3 用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol ,UDP)UDP與TCP的區(qū)別:1 TCP是一種面向流的協(xié)議,這意味著數(shù)據(jù)包的順序?qū)⒌玫奖WC。換句話說,數(shù)據(jù)報(bào)不可能出現(xiàn)重復(fù)和亂序接收的現(xiàn)象。UDP不能保證數(shù)據(jù)包的有序接收,也不能保證數(shù)據(jù)包的重復(fù)發(fā)送。2 TCP可以保證數(shù)據(jù)報(bào)可靠的傳輸,意味著數(shù)據(jù)報(bào)在傳輸過程中不會(huì)出現(xiàn)丟失。這是通過在發(fā)送者和接收者之間管理一個(gè)活躍連接完成的。UDP是一種無連接的協(xié)議,不能保證數(shù)據(jù)報(bào)的完整傳輸。
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)用是時(shí)間敏感的,您想盡量消除網(wǎng)絡(luò)延時(shí)。UDP的劣勢:1.
33、160;UDP是不可靠的,您可能丟失一些消息,所以您的應(yīng)用程序應(yīng)當(dāng)解決這種消息丟失的情況。2. 在客戶端和JMS中介之間傳遞的消息不單單是普通消息,這里還夾雜著控制命令,如果一些控制命令由于UDP的不可靠丟失,那么JMS連接是危險(xiǎn)的。所以你必須提供一層可靠的傳輸確??刂葡⒌恼_傳輸。配置示例如下:<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實(shí)現(xiàn)的,
36、所有配置上也和TCP很相似。在默認(rèn)的情況下SSL的端口號是61617。配置示例如下:<transportonnector Name=”tcp” Uri=”tcp:/localhost:61616?trace=true”/><transportConnector &
37、#160; Name=”ssl” Uri=”ssl:/localhost:61617?trace=true”/></transportConnectors>需要特別注意的是SSL需要一個(gè)證書和密鑰。具體內(nèi)容參考原版ActiveMQ in Action第100頁。略。4.3.5 超文本傳輸協(xié)議(HTTP/HTTPS)在一些環(huán)境下,防火墻僅允許使用一些基礎(chǔ)的協(xié)議訪問。這是HTTP協(xié)議出
38、現(xiàn)的原因。ActiveMQ實(shí)現(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;使用虛擬機(jī)協(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傳輸連接器加載一個(gè)內(nèi)嵌的中介代理并且與之連接。使用VM表示在客戶端和內(nèi)嵌的中介之間不需要網(wǎng)絡(luò)連接,通信是直接使用方法調(diào)用的形式。由于不使用網(wǎng)絡(luò)協(xié)議棧,效能會(huì)得到明顯的提高。當(dāng)?shù)谝粋€(gè)連接使用VM協(xié)議被創(chuàng)建時(shí)中介被開啟。同一虛擬機(jī)的后續(xù)的VM傳輸連接都會(huì)連接到同一個(gè)中
41、介。使用VM協(xié)議創(chuàng)建的中介具有獨(dú)立ActiveMQ的所有特性,并且這個(gè)中介也可以被其他的傳輸連接配置。當(dāng)所有的連接到這個(gè)VM傳輸連接代理的連接都結(jié)束后,中介代理將會(huì)自動(dòng)關(guān)閉。語法如下:vm:/brokerName?key=valueVM 的代理名字在這里起到了至關(guān)重要的作用,用于標(biāo)識(shí)一個(gè)中介。例如,您可以通過指定特定的中介名字創(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實(shí)例如下:Vm:broker:(tcp:/localhost:6000)?brokerName=embeddedbroker&persistent=false上例中我們定義了一個(gè)名字為embeddedBroker的內(nèi)嵌中介,并且配置了TCP傳輸連接在端口6000進(jìn)行監(jiān)聽。最后取消了代理的持久化。如下圖所示: 上圖給出了客戶端可以通過TCP連接到一個(gè)內(nèi)嵌的代理??梢酝ㄟ^配置文件對內(nèi)嵌代理進(jìn)行配置,
43、然后進(jìn)行引用,如下:Vm:/localhost?brokerConfig=xbean:activemq.xml這個(gè)例子將會(huì)從classpath使用XBean協(xié)議加載activemq.xml文件配置內(nèi)嵌代理。使用內(nèi)嵌代理的一個(gè)明顯好處就是改進(jìn)了客戶端和代理之間的通信。并且您的Java應(yīng)用僅需要一個(gè)應(yīng)用程序(一個(gè)jvm中)而不是兩個(gè)(獨(dú)立運(yùn)行ActiveMQ時(shí),ActiveMQ自身是一個(gè)Java應(yīng)用程序),簡化您的程序配置過程。同時(shí)也意味著減少一個(gè)Java處理過程。另一方面,如果很多的Java應(yīng)用程序使用一個(gè)內(nèi)嵌的代理,管理問題可能就會(huì)出現(xiàn)。這種情況應(yīng)當(dāng)使用單獨(dú)的集群式代理而不是內(nèi)嵌代理。4.3&
44、#160;配置網(wǎng)絡(luò)連接器(Network Connectors)當(dāng)應(yīng)用程序具有大規(guī)模和高可用性需求時(shí),最好使用網(wǎng)絡(luò)代理(Network of brokers)。一個(gè)網(wǎng)絡(luò)代理創(chuàng)建一個(gè)有多個(gè)ActiveMQ實(shí)例組成的集群系統(tǒng),他們之間連接完成復(fù)雜的消息使用場景。前面討論的是由客戶端和代理之間的連接,這里強(qiáng)調(diào)的是代理與代理之間的連接。默認(rèn)的網(wǎng)絡(luò)連接通道是單向的。同時(shí)ActiveMQ也支持雙向的通道。如下圖所示: 網(wǎng)絡(luò)連接器的配置是通過對ActiveMQ的xml文檔進(jìn)行配置完成的,如下所示:網(wǎng)絡(luò)連接器有一個(gè)重要概念叫發(fā)現(xiàn)(Discovery)。發(fā)現(xiàn)就是探測遠(yuǎ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)動(dòng)態(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 即,一個(gè)URI中包
46、含了其他的URIs。組合URI中包含了多個(gè)代理的地址(URIs)。語法如下:Static:(uri1,uri2,uri3,)?key=value下面給出一個(gè)配置實(shí)例:<networkConnectors> <networkConnector name=”local network” &
47、#160; Uri=”static:/(tcp:/remotehost1:61616,tcp:/remotehost2:61616)”/></networkConnectors>假設(shè),您使用的Broker為localhost,并且remotehost1和remotehost2這兩個(gè)Broker已經(jīng)開啟。輸出信息如下: 上面的輸出表明:localhost已經(jīng)成功的與其他兩個(gè)代理之間創(chuàng)建了轉(zhuǎn)送橋接(forwarding bridge),換句話說,發(fā)往本地代理的消息將會(huì)轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)1和遠(yuǎn)程主機(jī)2。4.4.2 Failover Protocol到目前
48、為止,客戶端都是連接到一個(gè)指定的代理。但是如果指定代理不可用該如何處理。可以有兩種可用的方案。第一種方案是,你提供一個(gè)靜態(tài)的可用代理鏈表,使用failover transport connector。另外一種方案是,動(dòng)態(tài)的去發(fā)現(xiàn)可用的代理。語法:Failover:(uri1, , uriN)?key=value或者:Failover:uri1, ,uriN)在默認(rèn)情況下會(huì)采用一種隨機(jī)算法選取一個(gè)連接器進(jìn)行鏈接。如果一個(gè)出現(xiàn)錯(cuò)誤,那么連接器會(huì)選擇另外一個(gè)連接器進(jìn)行鏈接。默認(rèn)的連接采用一種重連接延遲邏輯(reconnection delay logic),意味著,一個(gè)連接失敗后將延遲10ms重新啟
49、動(dòng),之后將以30000ms重新嘗試。重試連接將是無限此的。當(dāng)然您可以使用相應(yīng)的參數(shù)來配置重新連接。4.5 定義動(dòng)態(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實(shí)例:<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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度文化創(chuàng)意產(chǎn)品采購合同變更及版權(quán)協(xié)議3篇
- 二零二五版美團(tuán)騎手薪酬福利及晉升體系合同2篇
- 課題申報(bào)參考:南嶺走廊儺戲服飾文化基因解碼及傳承路徑研究
- 課題申報(bào)參考:慢波睡眠期間無意識(shí)序列學(xué)習(xí)的神經(jīng)機(jī)制及認(rèn)知調(diào)控
- 2025年度虛擬現(xiàn)實(shí)游戲開發(fā)與授權(quán)合同范本4篇
- 2025年度個(gè)人旅游居間代理合同樣本2篇
- 南京市2025年度二手房購房合同(含環(huán)保檢測報(bào)告)4篇
- 2025年度個(gè)人租賃城市中心公寓及家電配置合同3篇
- 2025版南寧高新區(qū)廠房租賃合同及技術(shù)支持服務(wù)協(xié)議4篇
- 2025年度個(gè)人小額信用貸款合同范本7篇
- 綠化養(yǎng)護(hù)難點(diǎn)要點(diǎn)分析及技術(shù)措施
- 2024年河北省高考?xì)v史試卷(含答案解析)
- 車位款抵扣工程款合同
- 2023年湖北省襄陽市中考數(shù)學(xué)真題(原卷版)
- 小學(xué)六年級數(shù)學(xué)奧數(shù)題100題附答案(完整版)
- 湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 英漢互譯單詞練習(xí)打印紙
- 2023湖北武漢華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員24人筆試參考題庫(共500題)答案詳解版
- 一氯二氟甲烷安全技術(shù)說明書MSDS
- 母嬰護(hù)理員題庫
- SWITCH暗黑破壞神3超級金手指修改 版本號:2.7.6.90885
評論
0/150
提交評論