ActiveMQ支持的消息協議
- 2020 年 4 月 20 日
- 筆記
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就可以使用多種傳輸方式。官方的配置文檔://activemq.apache.org/configuring-transports
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¶m2=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的發佈訂閱模型:
服務質量(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