国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于異步消息處理的RabbitMQ運(yùn)行原理探討

2017-11-30 07:51:43駱文亮四川職業(yè)技術(shù)學(xué)院
數(shù)碼世界 2017年11期
關(guān)鍵詞:發(fā)送者隊(duì)列交換機(jī)

駱文亮 四川職業(yè)技術(shù)學(xué)院

基于異步消息處理的RabbitMQ運(yùn)行原理探討

駱文亮 四川職業(yè)技術(shù)學(xué)院

對(duì)于一個(gè)大型的軟件系統(tǒng)來說,不同的模塊分布在不同的服務(wù)器上,模塊之間的通信如果采用傳統(tǒng)的同步消息傳輸機(jī)制來傳輸?shù)脑挄?huì)導(dǎo)致很多問題(如連接的維持、通信的可靠性、消息的過濾等等)。本文主要分析了基于消息異步處理的RabbitMQ的幾種不同的消息分發(fā)機(jī)制,并說明了這些方式的主要應(yīng)用場(chǎng)景。

RabbitMQ 消息異步處理

1 引言

在較為大型的商業(yè)軟件開發(fā)中,常常會(huì)遇到下面這些問題:①多個(gè)模塊間需要通過定時(shí)任務(wù)來同步某些數(shù)據(jù);②異構(gòu)系統(tǒng)的不同進(jìn)程間相互調(diào)用、通訊;③各個(gè)系統(tǒng)(模塊)之間的負(fù)載均衡;④消息的優(yōu)先級(jí)的定義等等問題。本文主要分析了能夠解決以上問題的基于消息的異步處理的一種實(shí)現(xiàn)——RabbitMQ的消息分發(fā)機(jī)制。

2 RabbitMQ介紹

AMQP,即Advanced Message Queuing Protocol,高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。

RabbitMQ是一個(gè)開源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。

3 RabbitMQ分析

3.1 RabbitMQ運(yùn)行機(jī)制

如圖3-1所示,RabbitMQ的運(yùn)行需要三個(gè)“部件”:①RabbitMQ服務(wù)器(RabbitMQ Server);②消息發(fā)送者(ClientA、ClientB);③消息的消費(fèi)者(Client1、Client2、Client3)。這三者相互合作、缺一不可。下面分別對(duì)著三者進(jìn)行詳細(xì)介紹:

RabbitMQ Server:RabbitMQ服務(wù)器,主要功能就是維護(hù)一條從“消息發(fā)送者”到“消息消費(fèi)者”的路線,保證數(shù)據(jù)能夠按照指定的方式進(jìn)行傳輸。

Client A amp; B:數(shù)據(jù)的發(fā)送方。數(shù)據(jù)通過交換機(jī)(Exchange)路由到相應(yīng)的隊(duì)列(Queue)上。

Client 1,2,3:數(shù)據(jù)的接收方。當(dāng)發(fā)送方把數(shù)據(jù)路由到隊(duì)列(Queue)上以后,由RabbitMQ服務(wù)器把隊(duì)列上的數(shù)據(jù)分發(fā)給相應(yīng)的接收方。

圖3-1 RabbitMQ運(yùn)行機(jī)制

在默認(rèn)情況下,如果消息已經(jīng)被某個(gè)“消息消費(fèi)者”正確的接收到后,那么該消息就會(huì)被從隊(duì)列中移除。

如果一個(gè)隊(duì)列沒被任何的“消息消費(fèi)者”(訂閱),那么如果這個(gè)隊(duì)列有數(shù)據(jù)到達(dá),那么這個(gè)數(shù)據(jù)會(huì)被緩存,不會(huì)被丟棄。當(dāng)有“消息消費(fèi)者”時(shí),這個(gè)數(shù)據(jù)會(huì)被立即發(fā)送給它,這個(gè)數(shù)據(jù)接受完成時(shí)就會(huì)從隊(duì)列中刪除。

RabbitMQ采用了“發(fā)送——確認(rèn)”機(jī)制來確保消息能夠正確接收。每個(gè)消息都要需要被確認(rèn)(ack)后才算是正確接收。

如果這個(gè)開發(fā)者所開發(fā)的軟件忘記了確認(rèn)操作(ack),那么RabbitMQ Server不會(huì)再發(fā)送數(shù)據(jù)給它,因?yàn)镾erver認(rèn)為這個(gè)Consumer處理能力有限。

3.2 RabbitMQ消息分發(fā)機(jī)制

實(shí)際上,從圖3-1可以看出,消息發(fā)送者的消息進(jìn)入了交換機(jī)(Exchange)后,RabbitMQ會(huì)通過“routing keys”,找到應(yīng)該把這個(gè)消息綁定到相應(yīng)的哪個(gè)隊(duì)列(queue)里。

RabbitMQ在將消息從交換機(jī)(Exchange)最終投遞到“消息消費(fèi)者”去的時(shí)候,一共有三種分發(fā)方式:

①Direct exchange:直接匹配模式,如果routing key匹配,那么Message就會(huì)被傳遞到相應(yīng)的queue中。其實(shí)在queue創(chuàng)建時(shí),它會(huì)自動(dòng)的以queue的名字作為routing key來綁定那個(gè)exchange。這種方式主要適合用于有明確訂閱關(guān)系的情況下使用。

②Fanout exchange:廣播方式,這種方式會(huì)向所有的隊(duì)列發(fā)送消息進(jìn)行廣播,適用于通知類型的消息發(fā)送。

③Topic exchange:主題式方式,這種方式會(huì)以key進(jìn)行模式匹配,比如通配符?號(hào)來發(fā)送消息,如xy?就可以把消息發(fā)送到到所有匹配到xy?的隊(duì)列(queue)中去。此模式非常適合于分組發(fā)送消息的場(chǎng)景下所使用。

4 結(jié)束語

在實(shí)際的軟件開發(fā)過程中,RabbitMQ在需要處理異步消息的大型應(yīng)用場(chǎng)景中是非常常見的一個(gè)解決方案。本文對(duì)RabbitMQ進(jìn)行了介紹、運(yùn)行機(jī)制分析、消息分發(fā)機(jī)制分析進(jìn)行了探討以期為需要使用異步消息處理框架的開發(fā)者提供思路。

[1]anzhsoft.Detailed Introduction詳細(xì)介紹[N/OL].http://blog.csdn.net/anzhsoft/article/details/19563091

[2]RabbtMQ官網(wǎng)http://www.rabbitmq.com/

[3]袁佳,郭燕慧基于rabbitmq的海量日志的分布式處理[D].北京郵電大學(xué)計(jì)算機(jī)學(xué)院2013.07

[4]魚朝偉詹舒波基于RabbitMQ的異步全雙工消息總線的實(shí)現(xiàn)[D]北京郵電大學(xué)網(wǎng)絡(luò)技術(shù)研究院2016.02

猜你喜歡
發(fā)送者隊(duì)列交換機(jī)
網(wǎng)絡(luò)表情符號(hào)的作用
表情符號(hào)的使用角度對(duì)親密度感知的影響
論《聊齋志異》夢(mèng)境敘事
蒲松齡研究(2020年3期)2020-10-28 01:38:41
隊(duì)列里的小秘密
基于多隊(duì)列切換的SDN擁塞控制*
軟件(2020年3期)2020-04-20 00:58:44
在隊(duì)列里
修復(fù)損壞的交換機(jī)NOS
使用鏈路聚合進(jìn)行交換機(jī)互聯(lián)
豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
PoE交換機(jī)雷擊浪涌防護(hù)設(shè)計(jì)
江都市| 翁牛特旗| 连州市| 郎溪县| 莎车县| 新泰市| 任丘市| 信阳市| 金塔县| 宿松县| 永顺县| 盱眙县| 光泽县| 定远县| 富裕县| 乌拉特中旗| 昌都县| 田林县| 铅山县| 泰兴市| 左云县| 六枝特区| 惠州市| 长葛市| 高邮市| 砚山县| 浙江省| 若尔盖县| 永吉县| 郁南县| 若羌县| 十堰市| 永登县| 沁源县| 白山市| 万载县| 阳朔县| 广州市| 鄱阳县| 巴林左旗| 南开区|