ActiveMQ(四)---連接器connector

1. 什么是連接器

在ActiveMQ中有3個重要的角色:Broker、Producer、Consumer。
Broker為消息代理,它是ActiveMQ服務(wù)端角色,接受客戶端的連接并提供消息通信的核心服務(wù)。
Producer是消息生產(chǎn)者,客戶端角色。
Consumer是消息消費者,客戶端角色。

客戶端怎樣和服務(wù)端通信,該選擇哪種網(wǎng)絡(luò)協(xié)議?ActiveMQ定義的連接器(connector)就是用來約定ActiveMQ的節(jié)點之間如何通信。

2. 連接器分類

在ActiveMQ中,連接器(connector)共分為以下兩類:

  • 傳輸連接器(transport connector):用于客戶端和服務(wù)端之間( client-to-broker)的通信。
  • 網(wǎng)絡(luò)連接器(network connector):用戶集群中多個服務(wù)端之間(broker-to-broker)的通信。

2.1 傳輸連接器

傳輸連接器提供了很多連接協(xié)議供使用者來選擇,ActiveMQ 的5.15版本包括以下協(xié)議:

  • tcp,默認使用的協(xié)議,符合大多數(shù)的使用場景。
  • udp,客戶端使用udp協(xié)議和服務(wù)端通信,當(dāng)客戶端和服務(wù)端之間存在防火墻可以考慮使用udp協(xié)議。
  • vm,當(dāng)客戶端和服務(wù)端在同一個JVM中可以考慮使用。直接使用虛擬機本地方法調(diào)用,從而避免網(wǎng)絡(luò)通信的開銷。
  • nio,本質(zhì)上還是tcp,只是使用了java NIO包,某些場景下可能性能更好。
  • ssl,基于tcp提供安全的通信。
  • http/https,允許客戶端使用REST或Ajax的方式進行連接,可以通過JS給ActiveMQ發(fā)送消息。
  • multicast,客戶端使用組播的方式連接到服務(wù)端。
  • websocket,可以通過HTML5中的websocket技術(shù)連接服務(wù)端。
  • amqp,高級消息隊列協(xié)議,很多消息中間件都支持該協(xié)議。ActiveMQ5.8版本開始支持。
  • mqtt,MQTT是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議,主要應(yīng)用在loT(物聯(lián)網(wǎng))。
  • stomp,STOMP是在WebSocket之上提供了一個基于幀的線路格式(frame-based wire format)層,用來定義消息的語義,就像HTTP在TCP套接字之上添加了請求-響應(yīng)模型層一樣。ActiveMQ5.6版本開始支持

用戶可以根據(jù)自己應(yīng)用的特點來選擇不同的協(xié)議。上面介紹的是客戶端和服務(wù)端之間通信的一些基本協(xié)議,除了這些基本協(xié)議之外,ActiveMQ還提供了客戶端和服務(wù)器端通信高可用的配置。

  • failover,為客戶端提供重連服務(wù)端的邏輯,允許配置多個上面介紹的不同協(xié)議的連接配置,并隨機的從其中選擇一個進行連接,如果失敗則繼續(xù)選擇其他服務(wù)重試。failover的配置格式:failover:(tcp://ip1:61616,tcp://ip2:61616)?initialReconnectDelay=100。
  • fanout,采用復(fù)制的方式將消息發(fā)送給多個服務(wù)端,配置格式為:fanout:(tcp://localhost:61629,udp://localhost:61639,tcp://localhost:61649)
    fanout

2.2 網(wǎng)絡(luò)連接器

網(wǎng)絡(luò)連接器用來將多個消息服務(wù)器連接在一起形成集群,作為一個整體對外提供服務(wù)。


broker集群

ActiveMQ中的網(wǎng)絡(luò)連接器,常用的有如下兩種:

  • static,靜態(tài)協(xié)議,用于已知多個服務(wù)器的IP地址。
  • multicast,廣播協(xié)議,用于服務(wù)器之間實現(xiàn)動態(tài)識別。

3. 連接器的配置及使用

服務(wù)端的連接器配置可以配置在ActiveMQ的配置文件%ActiveMQ_home%\conf\activemq.xml中(當(dāng)然ActiveMQ啟動時,可以指定配置文件)。在activemq.xml文件中,可以看到如下配置:

<transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

這段配置的含義是,這個ActiveMQ服務(wù)對外提供tcp\amqp\stomp\ws\mqtt協(xié)議,以便客戶端連接。

以TCP為例,可以看到配置語法都是形如:
tcp://hostname:port?key=value
具體各個協(xié)議具體怎么配置、支持哪些參數(shù)請參考官方文檔:
URI Protocols
Configuring Transports

指定單獨的配置文件

ActiveMQ服務(wù)默認的配置文件為:%ActiveMQ_home%\conf\activemq.xml。我們可以根據(jù)應(yīng)用的需求對此默認的配置文件進行修改,有時我們不想改動此文件,而是指定另外一個單獨的文件作為ActiveMQ的配置。針對這種情況,ActiveMQ提供了xbean支持,具體用法如下所示:

activemq start xbean:examples/conf/myactivemq.xml
xbean支持相對路徑和絕對路徑,下面的演示環(huán)境是windows cmd
1.相對路徑
D:\app\apache-activemq-5.15.8\bin> activemq start xbean:../examples/conf/activemq.xml
2.絕對路徑
D:\app\apache-activemq-5.15.8\bin> activemq start xbean:/D:/app/apache-activemq-5.15.8/examples/conf/activemq-demo.xml

客戶端指定連接協(xié)議

那么客戶端如何指定連接的協(xié)議呢?可以在創(chuàng)建ConnectionFactory對象時,指定使用什么協(xié)議和消息服務(wù)端進行通信。如下所示:

String brokerURL = "tcp://localhost:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);

和服務(wù)端一樣,客戶端也支持在url后面帶一些參數(shù),用來配置屬性。

參考資料/擴展閱讀

[1]:深入理解AMQP協(xié)議
[2]:《ActiveMQ In Action》
[3]:消息隊列之 ActiveMQ
[4]:Networks of Brokers

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容