ActiveMQ支援的訊息協議

CodingDiary發表於2020-04-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就可以使用多種傳輸方式。官方的配置文件: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

相關文章