ActiveMQ(四)---連接器connector

1. 什么是連接器

在ActiveMQ中有3個重要的角色:Broker、Producer、Consumer柱嫌。
Broker為消息代理,它是ActiveMQ服務端角色屯换,接受客戶端的連接并提供消息通信的核心服務慎式。
Producer是消息生產者,客戶端角色趟径。
Consumer是消息消費者瘪吏,客戶端角色。

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

2. 連接器分類

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

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

2.1 傳輸連接器

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

  • tcp渺尘,默認使用的協(xié)議,符合大多數的使用場景说敏。
  • udp鸥跟,客戶端使用udp協(xié)議和服務端通信,當客戶端和服務端之間存在防火墻可以考慮使用udp協(xié)議。
  • vm医咨,當客戶端和服務端在同一個JVM中可以考慮使用枫匾。直接使用虛擬機本地方法調用,從而避免網絡通信的開銷拟淮。
  • nio干茉,本質上還是tcp,只是使用了java NIO包很泊,某些場景下可能性能更好角虫。
  • ssl,基于tcp提供安全的通信委造。
  • http/https上遥,允許客戶端使用REST或Ajax的方式進行連接,可以通過JS給ActiveMQ發(fā)送消息争涌。
  • multicast粉楚,客戶端使用組播的方式連接到服務端。
  • websocket亮垫,可以通過HTML5中的websocket技術連接服務端模软。
  • amqp,高級消息隊列協(xié)議饮潦,很多消息中間件都支持該協(xié)議燃异。ActiveMQ5.8版本開始支持。
  • mqtt继蜡,MQTT是一個基于客戶端-服務器的消息發(fā)布/訂閱傳輸協(xié)議回俐,主要應用在loT(物聯網)。
  • stomp稀并,STOMP是在WebSocket之上提供了一個基于幀的線路格式(frame-based wire format)層仅颇,用來定義消息的語義,就像HTTP在TCP套接字之上添加了請求-響應模型層一樣碘举。ActiveMQ5.6版本開始支持

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

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

2.2 網絡連接器

網絡連接器用來將多個消息服務器連接在一起形成集群舟舒,作為一個整體對外提供服務。


broker集群

ActiveMQ中的網絡連接器嗜憔,常用的有如下兩種:

  • static秃励,靜態(tài)協(xié)議,用于已知多個服務器的IP地址吉捶。
  • multicast夺鲜,廣播協(xié)議,用于服務器之間實現動態(tài)識別呐舔。

3. 連接器的配置及使用

服務端的連接器配置可以配置在ActiveMQ的配置文件%ActiveMQ_home%\conf\activemq.xml中(當然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服務對外提供tcp\amqp\stomp\ws\mqtt協(xié)議,以便客戶端連接澎现。

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

指定單獨的配置文件

ActiveMQ服務默認的配置文件為:%ActiveMQ_home%\conf\activemq.xml剑辫。我們可以根據應用的需求對此默認的配置文件進行修改干旧,有時我們不想改動此文件,而是指定另外一個單獨的文件作為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é)議和消息服務端進行通信乳丰。如下所示:

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

和服務端一樣闹击,客戶端也支持在url后面帶一些參數,用來配置屬性成艘。

參考資料/擴展閱讀

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末赏半,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子淆两,更是在濱河造成了極大的恐慌断箫,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秋冰,死亡現場離奇詭異仲义,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門埃撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赵颅,“玉大人,你說我怎么就攤上這事暂刘〗让” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵谣拣,是天一觀的道長募寨。 經常有香客問我,道長森缠,這世上最難降的妖魔是什么拔鹰? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮贵涵,結果婚禮上列肢,老公的妹妹穿的比我還像新娘。我一直安慰自己宾茂,他們只是感情好例书,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刻炒,像睡著了一般决采。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坟奥,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天树瞭,我揣著相機與錄音,去河邊找鬼爱谁。 笑死晒喷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的访敌。 我是一名探鬼主播凉敲,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寺旺!你這毒婦竟也來了爷抓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤阻塑,失蹤者是張志新(化名)和其女友劉穎蓝撇,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體陈莽,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡渤昌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年虽抄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片独柑。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡迈窟,死狀恐怖,靈堂內的尸體忽然破棺而出忌栅,到底是詐尸還是另有隱情车酣,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布狂秘,位于F島的核電站骇径,受9級特大地震影響躯肌,放射性物質發(fā)生泄漏者春。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一清女、第九天 我趴在偏房一處隱蔽的房頂上張望钱烟。 院中可真熱鬧,春花似錦嫡丙、人聲如沸拴袭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拥刻。三九已至,卻和暖如春父泳,著一層夾襖步出監(jiān)牢的瞬間般哼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工惠窄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒸眠,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓杆融,卻偏偏與公主長得像楞卡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脾歇,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容