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

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

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

使用方法是指定鏈接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>節點,配置片斷以下: 服務器

<transportConnectors>
    <transportConnector name="openwire" uri="tcp://localhost:61616" />
    <transportConnector name="ssl" uri="ssl://localhost:61617"/>
    <transportConnector name="stomp" uri="stomp://localhost:61613"/>
    <transportConnector name="ws" uri="ws://localhost:61614/" />
    <transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671/" />
</transportConnectors>

其中name和uri必須惟一。這樣ActiveMQ的Broker就開啓的不一樣的監聽端口處理不一樣的傳輸鏈接。不一樣的傳輸鏈接的優缺點及使用場景以下:網絡

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

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

可用性高:TCP是使用最普遍的技術,幾乎全部的開發語言都支持TCP協議。單元測試

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

tcp配置:spa

<transportConnector name="tcp" uri="tcp://localhost:61616"/>

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

nio配置:

<transportConnector name="nio" uri="nio://localhost:61616"/>

nio+ssl配置:

<transportConnector name="nio+ssl" uri="nio+ssl://localhost:61616"/>

UDP:與面向鏈接,可靠的字節流服務的TCP不一樣,UDP是一個面向數據的簡單傳輸鏈接,沒有TCP的三次握手,因此性能大大強於TCP,可是是以犧牲可靠性爲前提。適用於丟失也無所謂的消息,如統計uv,pv。(固然若是真是統計uv什麼的,有Kafka這樣專門的消息中間件)。

udp配置:

<transportConnector name="udp" uri="udp://localhost:8123"/>

SSL:須要一個安全鏈接的時候能夠考慮使用SSL,適用於client和broker在公網的狀況,如使用aws雲平臺等。

ssl配置:

<transportConnector name="ssl" uri="ssl://localhost:8123"/>

HTTP(S):須要穿越防火牆,能夠考慮使用HTTP(S),但因爲HTTP(S)是短鏈接,每次建立鏈接的成本較高,因此性能最差。

http配置:

<transportConnector name="http" uri="http://localhost:8080"/>

https配置:

<transportConnector name="https" uri="https://localhost:8080"/>

VM:勉強能夠算一個協議吧。使用場景是client和broker在同一個Java虛擬機的狀況。如使用代碼啓動嵌入式的ActiveMQ Broker實例,一般用於單元測試。由於是嵌入式,因此不須要配置ActiveMQ的配置文件,只要在鏈接Broker的URI種直接使用便可。vm配置:(spring配置片斷)

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">
    <property name="brokerURL" value="vm://localhost"/>
</bean>

AMQP:ActiveMQ 5.8新增長的傳輸鏈接。用於支持AMQP(高級消息隊列協議)。由於AMQP是消息隊列的標準協議,並且已經愈來愈被普遍使用,因此ActiveMQ也支持了此協議。AMQP協議能夠搭配NIO或SSL協議使用,amqp+nio用於提高系統的延展性和性能。amqp+ssl能夠建立安全鏈接。

amqp配置:

<transportConnector name="amqp" uri="amqp://localhost:5672"/>

amqp+nio配置:

<transportConnector name="amqp+nio" uri="amqp+nio://localhost:5672"/>

amqp+ssl配置:

<transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5672"/>

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

mqtt配置:

<transportConnector name="mqtt" uri="mqtt://localhost:1883"/>

mqtt+nio配置:

<transportConnector name="mqtt+nio" uri="mqtt+nio://localhost:1883"/>

mqtt+ssl配置:

<transportConnector name="mqtt+ssl" uri="mqtt+ssl://localhost:1883"/>

其餘:Peer,Multicast,WebSockets。因爲使用場景較少,先暫時不介紹了。

相關文章
相關標籤/搜索