午夜视频在线观看区二区-午夜视频在线观看视频-午夜视频在线观看视频在线观看-午夜视频在线观看完整高清在线-午夜视频在线观看网站-午夜视频在线观看亚洲天堂

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

RabbitMQ 基礎(chǔ)知識(shí)

admin
2025年3月6日 16:55 本文熱度 381

1. 背景

RabbitMQ 是一個(gè)由 erlang 開(kāi)發(fā)的AMQP 開(kāi)源實(shí)現(xiàn),erlang語(yǔ)言天生具備高并發(fā)的特性,而且他的管理界面用起來(lái)十分方便。 

基礎(chǔ)概念

講解基礎(chǔ)概念的前面,我們先來(lái)整體構(gòu)造一個(gè)結(jié)構(gòu)圖,這樣會(huì)方便們更好地去理解RabbitMQ的基本原理。

 

通過(guò)上面這張應(yīng)用相結(jié)合的結(jié)構(gòu)圖既能夠清晰的看清楚整體的send Message到Receive Message的一個(gè)大致的流程。當(dāng)然上面有很多名詞都相比還沒(méi)有介紹到,不要著急接下來(lái)我們就開(kāi)始對(duì)其進(jìn)行詳細(xì)的講解。

 2. Queue

  Queue(隊(duì)列)RabbitMQ的作用是存儲(chǔ)消息,隊(duì)列的特性是先進(jìn)先出。上圖可以清晰地看到Client A和Client B是生產(chǎn)者,生產(chǎn)者生產(chǎn)消息最終被送到RabbitMQ的內(nèi)部對(duì)象Queue中去,而消費(fèi)者則是從Queue隊(duì)列中取出數(shù)據(jù)。可以簡(jiǎn)化成表示為:

?

  生產(chǎn)者Send Message “A”被傳送到Queue中,消費(fèi)者發(fā)現(xiàn)消息隊(duì)列Queue中有訂閱的消息,就會(huì)將這條消息A讀取出來(lái)進(jìn)行一系列的業(yè)務(wù)操作。這里只是一個(gè)消費(fèi)正對(duì)應(yīng)一個(gè)隊(duì)列Queue,也可以多個(gè)消費(fèi)者訂閱同一個(gè)隊(duì)列Queue,當(dāng)然這里就會(huì)將Queue里面的消息平分給其他的消費(fèi)者,但是會(huì)存在一個(gè)問(wèn)題就是如果每個(gè)消息的處理時(shí)間不同,就會(huì)導(dǎo)致某些消費(fèi)者一直在忙碌中,而有的消費(fèi)者處理完了消息后一直處于空閑狀態(tài),因?yàn)榍懊嬉呀?jīng)提及到了Queue會(huì)平分這些消息給相應(yīng)的消費(fèi)者。這里我們就可以使用prefetchCount來(lái)限制每次發(fā)送給消費(fèi)者消息的個(gè)數(shù)。詳情見(jiàn)下圖所示:  

 

  這里的prefetchCount=1是指每次從Queue中發(fā)送一條消息來(lái)。等消費(fèi)者處理完這條消息后Queue會(huì)再發(fā)送一條消息給消費(fèi)者。

 3. Exchange

  我們?cè)陂_(kāi)篇的時(shí)候就留了一個(gè)坑,就是那個(gè)應(yīng)用結(jié)構(gòu)圖里面,消費(fèi)者Client A和消費(fèi)者Client B是如何知道我發(fā)送的消息是給Queue1還是給Queue2,有沒(méi)有想過(guò)這個(gè)問(wèn)題,那么我們就來(lái)解開(kāi)這個(gè)面紗,看看到底是個(gè)什么構(gòu)造。首先明確一點(diǎn)就是生產(chǎn)者產(chǎn)生的消息并不是直接發(fā)送給消息隊(duì)列Queue的,而是要經(jīng)過(guò)Exchange(交換器),由Exchange再將消息路由到一個(gè)或多個(gè)Queue,當(dāng)然這里還會(huì)對(duì)不符合路由規(guī)則的消息進(jìn)行丟棄掉,這里指的是后續(xù)要談到的Exchange Type。那么Exchange是怎樣將消息準(zhǔn)確的推送到對(duì)應(yīng)的Queue的呢?那么這里的功勞最大的當(dāng)屬Binding,RabbitMQ是通過(guò)Binding將Exchange和Queue鏈接在一起,這樣Exchange就知道如何將消息準(zhǔn)確的推送到Queue中去。簡(jiǎn)單示意圖如下所示:

  在綁定(Binding)Exchange和Queue的同時(shí),一般會(huì)指定一個(gè)Binding Key,生產(chǎn)者將消息發(fā)送給Exchange的時(shí)候,一般會(huì)產(chǎn)生一個(gè)Routing Key,當(dāng)Routing Key和Binding Key對(duì)應(yīng)上的時(shí)候,消息就會(huì)發(fā)送到對(duì)應(yīng)的Queue中去。那么Exchange有四種類型,不同的類型有著不同的策略。也就是表明不同的類型將決定綁定的Queue不同,換言之就是說(shuō)生產(chǎn)者發(fā)送了一個(gè)消息,Routing Key的規(guī)則是A,那么生產(chǎn)者會(huì)將Routing Key=A的消息推送到Exchange中,這時(shí)候Exchange中會(huì)有自己的規(guī)則,對(duì)應(yīng)的規(guī)則去篩選生產(chǎn)者發(fā)來(lái)的消息,如果能夠?qū)?yīng)上Exchange的內(nèi)部規(guī)則就將消息推送到對(duì)應(yīng)的Queue中去。那么接下來(lái)就來(lái)詳細(xì)講解下Exchange里面類型。

 

 4. Exchange Type

  Exchange分為以下四種: 

4.1 fanout

  fanout類型的Exchange路由規(guī)則非常簡(jiǎn)單,它會(huì)把所有發(fā)送到該Exchange的消息路由到所有與它綁定的Queue中。

  上圖所示,生產(chǎn)者(P)生產(chǎn)消息1將消息1推送到Exchange,由于Exchange Type=fanout這時(shí)候會(huì)遵循fanout的規(guī)則將消息推送到所有與它綁定Queue,也就是圖上的兩個(gè)Queue最后兩個(gè)消費(fèi)者消費(fèi)。 

4.2 direct

  direct類型的Exchange路由規(guī)則也很簡(jiǎn)單,它會(huì)把消息路由到那些binding key與routing key完全匹配的Queue中。

  當(dāng)生產(chǎn)者(P)發(fā)送消息時(shí)Rotuing key=booking時(shí),這時(shí)候?qū)⑾魉徒oExchange,Exchange獲取到生產(chǎn)者發(fā)送過(guò)來(lái)消息后,會(huì)根據(jù)自身的規(guī)則進(jìn)行與匹配相應(yīng)的Queue,這時(shí)發(fā)現(xiàn)Queue1和Queue2都符合,就會(huì)將消息傳送給這兩個(gè)隊(duì)列,如果我們以Rotuing key=create和Rotuing key=confirm發(fā)送消息時(shí),這時(shí)消息只會(huì)被推送到Queue2隊(duì)列中,其他Routing Key的消息將會(huì)被丟棄。 

4.3 topic

  前面提到的direct規(guī)則是嚴(yán)格意義上的匹配,換言之Routing Key必須與Binding Key相匹配的時(shí)候才將消息傳送給Queue,那么topic這個(gè)規(guī)則就是模糊匹配,可以通過(guò)通配符滿足一部分規(guī)則就可以傳送。它的約定是:

  1. routing key為一個(gè)句點(diǎn)號(hào)“. ”分隔的字符串(我們將被句點(diǎn)號(hào)“. ”分隔開(kāi)的每一段獨(dú)立的字符串稱為一個(gè)單詞),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
  2. binding key與routing key一樣也是句點(diǎn)號(hào)“. ”分隔的字符串
  3. binding key中可以存在兩種特殊字符“*”與“#”,用于做模糊匹配,其中“*”用于匹配一個(gè)單詞,“#”用于匹配多個(gè)單詞(可以是零個(gè))

    當(dāng)生產(chǎn)者發(fā)送消息Routing Key=F.C.E的時(shí)候,這時(shí)候只滿足Queue1,所以會(huì)被路由到Queue中,如果Routing Key=A.C.E這時(shí)候會(huì)被同是路由到Queue1和Queue2中,如果Routing Key=A.F.B時(shí),這里只會(huì)發(fā)送一條消息到Queue2中。

4.4 RPC

我們的RPC如此工作:
    ? 當(dāng)客戶端啟動(dòng)的時(shí)候,它創(chuàng)建一個(gè)匿名獨(dú)享的回調(diào)隊(duì)列。
    ? 在RPC請(qǐng)求中,客戶端發(fā)送帶有兩個(gè)屬性的消息:一個(gè)是設(shè)置回調(diào)隊(duì)列的 reply_to 屬性,另一個(gè)是設(shè)置唯一值的 correlation_id 屬性。
    ? 將請(qǐng)求發(fā)送到一個(gè) rpc_queue 隊(duì)列中。
    ? RPC工作者(又名:服務(wù)器)等待請(qǐng)求發(fā)送到這個(gè)隊(duì)列中來(lái)。當(dāng)請(qǐng)求出現(xiàn)的時(shí)候,它執(zhí)行他的工作并且將帶有執(zhí)行結(jié)果的消息發(fā)送給reply_to字段指定的隊(duì)列。

客戶端等待回調(diào)隊(duì)列里的數(shù)據(jù)。當(dāng)有消息出現(xiàn)的時(shí)候,它會(huì)檢查correlation_id屬性。如果此屬性的值與請(qǐng)求匹配,將它返回給應(yīng)用。

 5. 補(bǔ)充說(shuō)明

ConnectionFactory、Connection、Channel:


ConnectionFactory、Connection、Channel都是RabbitMQ對(duì)外提供的API中最基本的對(duì)象。Connection是RabbitMQ的socket鏈接,它封裝了socket協(xié)議相關(guān)部分邏輯。ConnectionFactory為Connection的制造工廠。
Channel是我們與RabbitMQ打交道的最重要的一個(gè)接口,我們大部分的業(yè)務(wù)操作是在Channel這個(gè)接口中完成的,包括定義Queue、定義Exchange、綁定Queue與Exchange、發(fā)布消息等。
Connection就是建立一個(gè)TCP連接,生產(chǎn)者和消費(fèi)者的都是通過(guò)TCP的連接到RabbitMQ Server中的,這個(gè)后續(xù)會(huì)再程序中體現(xiàn)出來(lái)。

Channel虛擬連接,建立在上面TCP連接的基礎(chǔ)上,數(shù)據(jù)流動(dòng)都是通過(guò)Channel來(lái)進(jìn)行的。為什么不是直接建立在TCP的基礎(chǔ)上進(jìn)行數(shù)據(jù)流動(dòng)呢?

如果建立在TCP的基礎(chǔ)上進(jìn)行數(shù)據(jù)流動(dòng),建立和關(guān)閉TCP連接有代價(jià)。頻繁的建立關(guān)閉TCP連接對(duì)于系統(tǒng)的性能有很大的影響,而且TCP的連接數(shù)也有限制,這也限制了系統(tǒng)處理高并發(fā)的能力。但是,在TCP連接中建立Channel是沒(méi)有上述代價(jià)的。


該文章在 2025/3/6 16:59:13 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产成年无码久久久久毛片 | 国产日韩亚洲大尺度高清 | 成人午夜福利视频镇东影视 | 国产日韩精品无码一区二区三区 | 国产成人综合亚洲欧洲 | 国产v亚洲v天堂无码久久久91 | 国产免费无码v片在线观看不卡 | 国产成人精品高清 | 91久久精品一区二区 | www国产精品 | 国产成人久久久精品一区二区三区 | 国产高清av在线播放 | 国产一区二区免 | 18国产精品白浆在线观看免费 | 韩国日韩欧美久久久 | 国产精品毛片a | 国产精品无码一区二区三区不卡 | 国产免费无遮挡吸乳视频下载 | 国产午夜成人免费看片无遮挡 | av免费一级二级 | 成人在线免费观看大全 | 国产成人亚洲精品91专区手机 | av一级在线观 | 国产成人剧情av麻豆果冻 | 国产sm主人调教女m视频 | av天堂一区二区在线最新 | 激情内射人妻1区2区3区 | 国产欧美精品一区二区性色 | 国产自制在线观看视频 | 国产动漫频道 | 国产精品一区二区亚瑟不卡 | 国产成a人亚洲精ⅴ品无码樱花 | 丰满人妻被猛烈进入中文 | 国产精品欧美一区二区三区 | 国产精品一区亚洲一区天堂 | 国产精品一一在线观看 | 国产午夜激情无码ⅴ毛片 | 国产高潮流白浆免费观看 | 国产视频一区二区无弹窗 | 国产丰满老熟女60岁重口对白 | 国产区人妖另类精 |