ActiveMQ的Transport Connectors配置(六)
生活随笔
收集整理的這篇文章主要介紹了
ActiveMQ的Transport Connectors配置(六)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
##ActiveMQ Connector配置 ###**ActiveMQ Connecor分為兩種:Transport Connector和Network Connector。transport Connector負責client和broker的連接,稱為client-to-broker communication;Network Connector負責broker和broker之間的連接,稱為broker-to-broker communication** ##Transport Connector
從broker的角度來看,transport connector是用于接受和監聽來自客戶端的連接請求的一種機制。比如在”conf/activemq.xml“這個配置文件中可以找到:
<!–?The?transport?connectors?ActiveMQ?will?listen?to?–>?? ????<transportConnectors>?? ????????<transportConnector?name=“openwire”?uri=“tcp://localhost:61616”?? ????????????discoveryUri=“multicast://default”/>?? ????????<transportConnector?name=“ssl”?uri=“ssl://localhost:61617”/>?? ????????<transportConnector?name=“stomp”?uri=“stomp://localhost:61613”/>?? ????????<transportConnector?name=“xmpp”?uri=“xmpp://localhost:61222”/>?? ????</transportConnectors>?? <!-- The transport connectors ActiveMQ will listen to --><transportConnectors><transportConnector name="openwire" uri="tcp://localhost:61616"discoveryUri="multicast://default"/><transportConnector name="ssl" uri="ssl://localhost:61617"/><transportConnector name="stomp" uri="stomp://localhost:61613"/><transportConnector name="xmpp" uri="xmpp://localhost:61222"/></transportConnectors>
可以看到在<transportConnectors>中包含了多個<transportConnector>對象,每一個對象都定義了監聽的地址、端口以及使用的協議。不同的<transportConnector>的name和uri屬性值必須不同。以上的配置定義了四個不同的<transportConnector>,那在啟動ActiveMQ時,就可以看到如下輸出:INFO?TransportServerThreadSupport?-?Listening?for?connections?at:?? ????tcp://localhost:61616?? ????INFO?TransportConnector?-?Connector?openwire?Started?? ????INFO?TransportServerThreadSupport?-?Listening?for?connections?at:?? ????ssl://localhost:61617?? ????INFO?TransportConnector?-?Connector?ssl?Started?? ????INFO?TransportServerThreadSupport?-?Listening?for?connections?at:?? ????stomp://localhost:61613?? ????INFO?TransportConnector?-?Connector?stomp?Started?? ????INFO?TransportServerThreadSupport?-?Listening?for?connections?at:?? ????xmpp://localhost:61222?? ????INFO?TransportConnector?-?Connector?xmpp?Started?? INFO TransportServerThreadSupport - Listening for connections at:tcp://localhost:61616INFO TransportConnector - 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 StartedINFO TransportServerThreadSupport - Listening for connections at:xmpp://localhost:61222INFO TransportConnector - Connector xmpp Started
? ? 從客戶端的角度來看,transportConnector的URI是用于和broker建立連接,以通過該連接來發送和接受消息。例如,以下Java代碼通過之前配置文件中定義的”openwire“那個transportConnector來與broker建立連接:ActiveMQConnectionFactory?factory?=?? ??????new?ActiveMQConnectionFactory(“tcp://localhost:61616”);?? ??Connection?connection?=?factory.createConnection();?? ??????connection.start();?? ??Session?session?=?? ??????connection.createSession(false,?Session.AUTO_ACKNOWLEDGE);?? ActiveMQConnectionFactory factory =new ActiveMQConnectionFactory("tcp://localhost:61616");Connection connection = factory.createConnection();connection.start();Session session =connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
? ? 加粗的部分為必須部分,剩余的key/value部分為可選部分,不同的key/value用”&”符號分開。具體的可選部分詳細介紹可以在http://activemq.apache.org/tcp-transport-reference.html這個網址中找到。可選部分用于定義broker的一些額外的行為,如假設我們進行如下配置: <transportConnector name=”tcp”uri=”tcp://localhost:61616?trace=true”/>
? ? 則broker會在日志中記錄經過這個connector所發送的每一條消息,這對于調試會有很大的幫助。 2. New I/O API協議(NIO) NIO是在Java SE 1.4開始引進的,用于提供一種網絡編程和訪問現代操作系統的底層I/O.NIO中使用最多的兩種特性是selector和non-blocking I/O,它們使得開發人員可以使用相同的資源來處理更多的網絡連接(如果不使用NIO技術,系統將無法承受這么多的網絡連接)。 從客戶端的角度來看,NIO transport connector與TCP connector是相同的,這是因為NIO connector實際上采用TCP來傳輸數據。唯一不同的是,NIO transport connector是利用NIO API實現的。這使得NIO在以下幾種情況下更為適合:
? ? NIO的默認監聽端口是61618,它也有trace這個可以,用于決定是否記錄所有傳輸的消息。 3. 用戶數據包協議(UDP) 根據UDP的特性,它一般用于要求傳出速率快,且能夠忍受丟包發生的情況。你可以使用UDP協議來連接ActiveMQ的UDP connector。它的URI語法與TCP及NIO基本一致: udp://hostname:port?key=value 完整的參考內容可以在http://activemq.apache.org/udp-transport-reference.html中找到,通常以下兩種情況可以考慮使用UDP:
? ? 由于ssl采用TCP進行傳輸,它的選項跟TCP是一致的,當然如果你需要更加詳細的說明,可以參考:http://activemq.apache.org/ssl-transport-reference.html,另外需要說明的是ssl connector默認監聽616167端口。
? ? 與之前介紹的3中協議不同,ssl connector還需要ssl證書來保證其正確運行。JSSE提供了兩類文件分別用于存儲key和certification,用于存儲key的文件稱為keystores,存儲certification的稱為truststores.
5.HTTP/HTTPS協議 有些服務器的防火墻設置了只能提供HTTP訪問,這時便是HTTP/HTTPS connector的地盤了。ActiveMQ實現的HTTP/HTTPS協議用于傳輸XML數據,它們的配置語法分別如下: http://hostname:port?key=value
? ??https://hostname:port?key=value
還需要添加依賴 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-optional</artifactId><version>5.4.1</version> </dependency> 6. 虛擬機協議(virtual machine protocol, VM) 除了以上介紹的5中協議外,ActiveMQ還可以嵌入Java應用程序中,這樣Java程序與broker之間的連接不會經過網絡,而是在同一個JVM中進行,從而可以減少網絡傳輸,大幅提升性能。這種方式成為虛擬機協議。 使用VM協議的broker擁有與其它協議相同的功能,VM connector的配置語法如下: vm://brokerName?key=value
? ? 關于VM connector具體可以參見http://activemq.apache.org/vm-transport-reference.html。
可以看到在<transportConnectors>中包含了多個<transportConnector>對象,每一個對象都定義了監聽的地址、端口以及使用的協議。不同的<transportConnector>的name和uri屬性值必須不同。以上的配置定義了四個不同的<transportConnector>,那在啟動ActiveMQ時,就可以看到如下輸出:
? ? 從客戶端的角度來看,transportConnector的URI是用于和broker建立連接,以通過該連接來發送和接受消息。例如,以下Java代碼通過之前配置文件中定義的”openwire“那個transportConnector來與broker建立連接:
二、Transport Connector的可用協議
ActiveMQ最常用的場景是作為一個單獨的程序運行,而客戶端(包括消息生產者和消費者)通過某種網絡協議來與ActiveMQ建立連接,并進行消息的收發。ActiveMQ支持多種網絡協議,具體如下: 1. 傳輸控制協議 ?TCP 由于TCP具有可靠傳輸的特性,它在ActiveMQ中也是最長使用的一種協議。在默認的配置中,TCP連接的端口為61616.TCP Connector的URI的配置語法如下: tcp://hostname:port?key=value&key=value? ? 加粗的部分為必須部分,剩余的key/value部分為可選部分,不同的key/value用”&”符號分開。具體的可選部分詳細介紹可以在http://activemq.apache.org/tcp-transport-reference.html這個網址中找到。可選部分用于定義broker的一些額外的行為,如假設我們進行如下配置: <transportConnector name=”tcp”uri=”tcp://localhost:61616?trace=true”/>
? ? 則broker會在日志中記錄經過這個connector所發送的每一條消息,這對于調試會有很大的幫助。 2. New I/O API協議(NIO) NIO是在Java SE 1.4開始引進的,用于提供一種網絡編程和訪問現代操作系統的底層I/O.NIO中使用最多的兩種特性是selector和non-blocking I/O,它們使得開發人員可以使用相同的資源來處理更多的網絡連接(如果不使用NIO技術,系統將無法承受這么多的網絡連接)。 從客戶端的角度來看,NIO transport connector與TCP connector是相同的,這是因為NIO connector實際上采用TCP來傳輸數據。唯一不同的是,NIO transport connector是利用NIO API實現的。這使得NIO在以下幾種情況下更為適合:
- 你有大量的客戶端需要連接broker。通常,與broker之間的連接數是受操作系統的線程數限制的,由于相比TCP connector而言,NIO connector會占用更少的線程。所以,當TCP connector無法滿足要求時,可以考慮使用NIO進行替代。
- 你到broker之間存在嚴重的網路阻塞。NIO connector會比TCP connector擁有更好的性能,因為它會使用更少的資源。
? ? NIO的默認監聽端口是61618,它也有trace這個可以,用于決定是否記錄所有傳輸的消息。 3. 用戶數據包協議(UDP) 根據UDP的特性,它一般用于要求傳出速率快,且能夠忍受丟包發生的情況。你可以使用UDP協議來連接ActiveMQ的UDP connector。它的URI語法與TCP及NIO基本一致: udp://hostname:port?key=value 完整的參考內容可以在http://activemq.apache.org/udp-transport-reference.html中找到,通常以下兩種情況可以考慮使用UDP:
- broker有防火墻的保護,只能通過UDP端口來訪問;
- 消息傳送對實時性要求非常高,可以通過UDP來盡可能的消除網絡延遲;
? ? 由于ssl采用TCP進行傳輸,它的選項跟TCP是一致的,當然如果你需要更加詳細的說明,可以參考:http://activemq.apache.org/ssl-transport-reference.html,另外需要說明的是ssl connector默認監聽616167端口。
? ? 與之前介紹的3中協議不同,ssl connector還需要ssl證書來保證其正確運行。JSSE提供了兩類文件分別用于存儲key和certification,用于存儲key的文件稱為keystores,存儲certification的稱為truststores.
5.HTTP/HTTPS協議 有些服務器的防火墻設置了只能提供HTTP訪問,這時便是HTTP/HTTPS connector的地盤了。ActiveMQ實現的HTTP/HTTPS協議用于傳輸XML數據,它們的配置語法分別如下: http://hostname:port?key=value
? ??https://hostname:port?key=value
還需要添加依賴 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-optional</artifactId><version>5.4.1</version> </dependency> 6. 虛擬機協議(virtual machine protocol, VM) 除了以上介紹的5中協議外,ActiveMQ還可以嵌入Java應用程序中,這樣Java程序與broker之間的連接不會經過網絡,而是在同一個JVM中進行,從而可以減少網絡傳輸,大幅提升性能。這種方式成為虛擬機協議。 使用VM協議的broker擁有與其它協議相同的功能,VM connector的配置語法如下: vm://brokerName?key=value
? ? 關于VM connector具體可以參見http://activemq.apache.org/vm-transport-reference.html。
總結
以上是生活随笔為你收集整理的ActiveMQ的Transport Connectors配置(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring和activemq的结合(五
- 下一篇: ActiveMQ的network con