ActiveMQ支持的消息協議

ActiveMQ支持哪些協議

ActiveMQ支持多種協議傳輸和傳輸方式,允許客戶端使用多種協議連接
ActiveMQ支持的協議:AUTO,OpenWire,AMQP,Stomp,MQTT等
ActiveMQ支持的基礎傳輸方式:VM,TCP,SSL,UDP,Peer,Multicast,HTTP(S)等,以及更高級的Failover,Fanout,Discovery,ZerConf方式

ActiveMQ的協議連接配置

在ActiveMQ安裝目錄的/conf/activemq.xml文件中,通過配置transportConnectors就可以使用多種傳輸方式。官方的配置文檔:http://activemq.apache.org/configuring-transports

img

ActiveMQ常用的傳輸方式及配置

TPC:由於TCP具有可靠傳輸的特性,它在ActiveMQ中也是最常使用的一種協議。默認的配置中,TCP連接的端口爲61616.
TCP配置格式:tcp://hostname:port?key=value
TCP配置參數說明:在服務端配置時,參數要以“transport.”開頭,在客戶端連接時,參數省略“transport.”前綴
TCP服務端配置示例:tcp://localhost:61616?transport.trace=false&transport.soTimeout=6000
TCP客戶端示例:tcp://localhost:61616?trace=false&soTimeout=6000
TCP配置參數說明:

SSL:需要一個安全連接的時候可以考慮使用SSL,適用於client和broker在公網的情況
SSL配置格式:ssl://hostname:61616
SSL客戶端配置:JMX客戶端需要使用ActiveMQSslConnectionFactory類創建連接,brokerUrl以ssl://開頭
SSL主機名驗證:從ActiveMQ 5.15.6開始,ActiveMQ開始支持TLS主機名驗證,默認情況下客戶端啓用了該驗證,而服務端沒有啓用。服務端配置爲 ssl://localhost:61616?transport.verifyHostName=true 客戶端配置爲 ssl://localhost:61616?verifyHostName=false

NIO: 使用Java的NIO方式對連接進行改進,因爲NIO使用線程池,可以複用線程,所以可以用更少的線程維持更多的連接。如果有大量客戶端,或者性能瓶頸在網絡傳輸上,可以考慮使用NIO的連接方式
NIO配置格式:nio://hostname:port?key=value
NIO是OpenWire協議的傳輸方式,其他協議,像AMQP,MQTT,STOMP也有NIO的實現,通常在協議前綴中加“+nio”來區分,如:mqtt+nio://localhost:1883
NIO傳輸線程使用配置:從5.15.0開始,ActiveMQ支持調整NIO的傳輸線程,可以設置以下屬性

NIO傳輸線程使用情況配置:屬性可以在ActiveMQ安裝目錄/bin/env中配置,如:

ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.transport.nio.SelectorManager.corePoolSize=2000 -Dorg.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=2000 -Dorg.apache.activemq.transport.nio.SelectorManager.workQueueCapacity=1024"

NIO+SSL:從ActiveMQ 5.6版本開始,NIO可以支持和NIO搭配使用的傳輸連接,格式爲nio+ssl://0.0.0.0:61616

UDP:與面向連接,可靠的字節流服務的TCP不同,UDP是一個面向數據的簡單傳輸連接,沒有TCP的三次握手,所以性能大大強於TCP,但是是以犧牲可靠性爲前提,適用於丟失也無所謂的消息。
UDP配置格式:udp://localhost:8123
UDP配置參數說明:

HTTP(S):需要穿越防火牆,可以考慮使用HTTP(S),但由於HTTP(S)時短連接,每次創建連接的成本較高,所以性能最差。通過XML傳輸數據。
HTTP(S)配置格式:http(s)://localhost:8080?param1=value1&param2=value2

VM:虛擬機協議(方法直調),使用場景是client和broker在同一個Java虛擬機內嵌的情況,無需網絡通信的開銷。
VM配置格式:vm://brokerName?marshal=false&broker.persistent=false
VM配置參數說明:

OpenWire協議

OpenWire協議是Apache一種跨語言的協議,允許從不同的語言和平臺訪問ActiveMQ,是ActiveMQ 4.x以後的版本默認的傳輸協議。

Open Wire支持TCP,SSL,NIO,UDP,VM等傳輸方式,直接配置這些連接,就是使用的OpenWire協議,OpenWire有自己的配置參數,客戶端和服務端配置的參數名通過前綴“wireFormat.”表示。如:tcp://localhost:61616?wireFormat.cacheEnabled=false

OpenWire的配置參數說明:

MQTT協議

MQTT(Message Queue Telemetry Transport)消息隊列遙測傳輸,是IBM開發的一個即時通訊協議,已成爲物聯網通信的標準。

MQTT的結構簡單,相對於其他協議,它更加輕量級。適合在計算能力有限,低帶寬,不可靠的網絡環境使用。

MQTT的發佈訂閱模型:
img

服務質量(QoS)級別是一種關於發生者和接收者之間信息投遞的保證協議。MQTT中有三種QoS級別:至多一次(level 0),至少一次(level 1),只有一次(level 2)
QoS是MQTT的一個主要功能,它使得在不可靠的網絡下進行通信變得簡單,因爲即便是在非常不可靠的網絡下,協議也可以掌控是否需要重發消息並保證消息到達。它也能幫助客戶端根據網絡環境和程序邏輯來自由選擇QoS

AUTO協議

AUTO,自動檢測協議,從ActiveMQ 5.13.0開始,ActiveMQ開始支持協議格式檢測,可以自動檢測OpenWire,STOMP,AMQP和MQTT,允許這四種類型的客戶端共享一個傳輸。
配置示例:auto://loacalhost:5671 ,auto+nio+ssl://localhost:5671

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章