ActiveMQ學習筆記01 - 客戶端與服務器之間的傳輸連接

ActiveMQ的cilent-to-broker的連接,叫做傳輸連接(Transport connectors),broker-to-broker間的連接,叫做網絡連接(Network connectors)。

ActiveMQ支持許多種客戶端與服務器的傳輸連接。分別是TCP,NIO,UDP,SSL,HTTP(S),VM,AMQP,MQTT,Peer,Multicast,WebSockets。

使用方法是指定連接Broker URI。URI scheme是傳輸連接名稱,path是Broker的IP地址和端口號,另外可以使用Key Value形式的Query串作爲參數,如:tcp://localhost:61616?trace=true。而且各個協議之間可以組合,使用方式如:amqp+ssl://localhost:5671。

爲ActiveMQ服務器配置多協議支持的方法是,編輯%ACTIVEMQ_HOME%conf\activemq.xml文件。此文件是ActiveMQ的配置文件。編輯<transportConnectors>節點,配置片段如下:

[html] view plain copy
  1. <transportConnectors>  
  2.     <transportConnector name="openwire" uri="tcp://localhost:61616" />  
  3.     <transportConnector name="ssl" uri="ssl://localhost:61617"/>  
  4.     <transportConnector name="stomp" uri="stomp://localhost:61613"/>  
  5.     <transportConnector name="ws" uri="ws://localhost:61614/" />  
  6.     <transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671/" />  
  7. </transportConnectors>  
其中name和uri必須唯一。這樣ActiveMQ的Broker就開啓的不同的監聽端口處理不同的傳輸連接。不同的傳輸連接的優缺點及使用場景如下:

TCP:ActiveMQ默認的傳輸連接,也是最常用的使用方式。長連接,每個客戶端實例都會與服務器維持一個連接。每個連接一個線程。TCP的優點是:

性能高:ActiveMQ使用默認協議OpenWire序列化和反序列化消息。OpenWire是一個性能很高的序列化協議。

可用性高:TCP是使用最廣泛的技術,幾乎所有的開發語言都支持TCP協議。

可靠性高:TCP協議確保消息不會在網絡傳說的過程中丟失。

tcp配置:

[html] view plain copy
  1. <transportConnector name="tcp" uri="tcp://localhost:61616"/>  

NIO:使用Java的NIO方式對連接進行改進,因爲NIO使用線程池,可以複用線程,所以可以用更少的線程維持更多的連接。如果有大量的客戶端,或者性能瓶頸在網絡傳輸上,可以考慮使用NIO的連接方式。也可以根據不同的場景選擇不用的傳輸連接,比如:Producer有很多,但是Consumer很少,可以Producer用NIO協議,Consumer用TCP協議。從ActiveMQ 5.6版本開始,NIO可以支持和SSL搭配使用的傳輸連接。

nio配置:

[html] view plain copy
  1. <transportConnector name="nio" uri="nio://localhost:61616"/>  
nio+ssl配置:

[html] view plain copy
  1. <transportConnector name="nio+ssl" uri="nio+ssl://localhost:61616"/>  
UDP:與面向連接,可靠的字節流服務的TCP不同,UDP是一個面向數據的簡單傳輸連接,沒有TCP的三次握手,所以性能大大強於TCP,但是是以犧牲可靠性爲前提。適用於丟失也無所謂的消息,如統計uv,pv。(當然如果真是統計uv什麼的,有Kafka這樣專門的消息中間件)。

udp配置:

[html] view plain copy
  1. <transportConnector name="udp" uri="udp://localhost:8123"/>  
SSL:需要一個安全連接的時候可以考慮使用SSL,適用於client和broker在公網的情況,如使用aws雲平臺等。

ssl配置:

[html] view plain copy
  1. <transportConnector name="ssl" uri="ssl://localhost:8123"/>  
HTTP(S):需要穿越防火牆,可以考慮使用HTTP(S),但由於HTTP(S)是短連接,每次創建連接的成本較高,所以性能最差。

http配置:

[html] view plain copy
  1. <transportConnector name="http" uri="http://localhost:8080"/>  

https配置:

[html] view plain copy
  1. <transportConnector name="https" uri="https://localhost:8080"/>  
VM:勉強可以算一個協議吧。使用場景是client和broker在同一個Java虛擬機的情況。如使用代碼啓動嵌入式的ActiveMQ Broker實例,通常用於單元測試。因爲是嵌入式,所以不需要配置ActiveMQ的配置文件,只要在連接Broker的URI種直接使用即可。vm配置:(spring配置片段)

[html] view plain copy
  1. <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">  
  2.     <property name="brokerURL" value="vm://localhost"/>  
  3. </bean>  
AMQP:ActiveMQ 5.8新增加的傳輸連接。用於支持AMQP(高級消息隊列協議)。因爲AMQP是消息隊列的標準協議,而且已經越來越被廣泛使用,所以ActiveMQ也支持了此協議。AMQP協議可以搭配NIO或SSL協議使用,amqp+nio用於提升系統的延展性和性能。amqp+ssl可以創建安全連接。

amqp配置:

[html] view plain copy
  1. <transportConnector name="amqp" uri="amqp://localhost:5672"/>  
amqp+nio配置:

[html] view plain copy
  1. <transportConnector name="amqp+nio" uri="amqp+nio://localhost:5672"/>  

amqp+ssl配置:

[html] view plain copy
  1. <transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5672"/>  

MQTT:ActiveMQ 5.8新增加的傳輸連接。是一個輕量級的消息訂閱/發佈協議。和AMQP一樣,同樣支持搭配NIO或SSL使用。

mqtt配置:

[html] view plain copy
  1. <transportConnector name="mqtt" uri="mqtt://localhost:1883"/>  

mqtt+nio配置:

[html] view plain copy
  1. <transportConnector name="mqtt+nio" uri="mqtt+nio://localhost:1883"/>  

mqtt+ssl配置:

[html] view plain copy
  1. <transportConnector name="mqtt+ssl" uri="mqtt+ssl://localhost:1883"/>  

其他:Peer,Multicast,WebSockets。由於使用場景較少,先暫時不介紹了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章