日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ActiveMQ的Transport Connectors配置(六)

發布時間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);

    二、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的配置語法與TCP的配置相似,只需將tcp替換成nio即可: nio://hostname:port?key=value
    ? ? 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來盡可能的消除網絡延遲;
    ? ? 由于UDP的不可靠特性,所以在使用時,必須考慮丟包時的處理。 4. SSL協議(Secure Sockets Layer Protocol) 當broker暴露于不安全的網絡環境,而你的數據需要保密時,可以使用SSL。它是用于通過TCP傳輸加密數據的一種協議,它通過一對鑰匙(公鑰和私鑰)來保證一條安全通道。ActiveMQ提供SSL connector,它的語法如下: ssl://hostname:port?key=value
    ? ? 由于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配置(六)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。