成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RabbitMQ的架構(gòu)設(shè)計(jì)

開發(fā) 前端
RabbitMQ中生產(chǎn)者通過長(zhǎng)鏈接的方式連接到Broker,然后生產(chǎn)的消息被發(fā)送到對(duì)應(yīng)的交換機(jī)上,此時(shí)交換機(jī)會(huì)將消息發(fā)送到對(duì)應(yīng)的隊(duì)列上存儲(chǔ),最后消費(fèi)者就會(huì)來拉取消息來進(jìn)行處理,處理成功之后就會(huì)將這個(gè)消息進(jìn)行移除。

Kafka、RocketMq、ActiveMQ、RabbitMQ和Apache Pulsar都是現(xiàn)在使用的比較多的主流MQ,下面我們來介紹RabbitMQ的架構(gòu)設(shè)計(jì)。

    RabbitMQ使用Erlang語言開發(fā)消息隊(duì)列系統(tǒng),基于AMQP協(xié)議(高級(jí)消息隊(duì)列協(xié)議)實(shí)現(xiàn)的一個(gè)開源的消息中間件,它允許應(yīng)用程序之間進(jìn)行異步通信,并且RabbitMQ提供了一種高效、可擴(kuò)展、可靠的消息傳遞機(jī)制。

1、RabbitMQ的架構(gòu)

    RabbitMQ有生產(chǎn)者和消費(fèi)者,并且生產(chǎn)者和消費(fèi)者之間是通過RabbitMQ Server來進(jìn)行連接的,這樣的異步通訊方式使得生產(chǎn)者和消費(fèi)者之間沒有強(qiáng)關(guān)聯(lián),RabbitMQ的架構(gòu)圖如下所示:

圖片圖片

    RabbitMQ中有虛擬機(jī)(Virtual Host),虛擬機(jī)的作用是在一個(gè)完整的微服務(wù)架構(gòu)可以使用同一個(gè)套R(shí)abbitMQ服務(wù),在不同的微服務(wù)之間是根據(jù)虛擬機(jī)來進(jìn)行區(qū)分的,如訂單系統(tǒng)使用一個(gè)虛擬機(jī),商品系統(tǒng)使用自己的虛擬機(jī),這樣不同的微服務(wù)使用它自己的虛擬機(jī)即可。

    同時(shí)虛擬機(jī)與虛擬機(jī)之間的數(shù)據(jù)是相互隔離,并不會(huì)互相產(chǎn)生影響,在虛擬機(jī)里面就存在了交換機(jī)(Exchange)和隊(duì)列(queue)。

    RabbitMQ與生產(chǎn)者、消費(fèi)者之間的連接是通過多個(gè)信道實(shí)現(xiàn)的,信道是建立在Connection之上的虛擬連接,當(dāng)應(yīng)用程序與RabbitMQ Broker建立TCP連接的時(shí)候,客戶端緊接著可以創(chuàng)建一個(gè)AMQP信道(Channel),每個(gè)信道都會(huì)被指派一個(gè)唯一的ID,RabbitMQ是使用長(zhǎng)連接來處理請(qǐng)求。

2、RabbitMQ的組件

2.1 生產(chǎn)者

    生產(chǎn)者是消息的發(fā)送方,它主要是負(fù)責(zé)產(chǎn)生并發(fā)送消息到RabbitMQ,生產(chǎn)者通常將消息發(fā)送到交換機(jī)(Exchange),如下圖所示:

圖片圖片

    為什么RabbitMQ將消息發(fā)送到交換機(jī)呢?假設(shè)RabbitMQ直接將消息投遞到隊(duì)列,如下圖所示:

圖片圖片

    在電商系統(tǒng)中如果用戶支付成功之后,需要通知訂單系統(tǒng)修改訂單的訂單狀態(tài),通知商品系統(tǒng)扣減商品的庫存,此時(shí)支付系統(tǒng)的作為消息的生產(chǎn)者就需要通知消費(fèi)者訂單系統(tǒng)和商品系統(tǒng)。

    如果采用直接將消息發(fā)送給隊(duì)列的方式,由于訂單系統(tǒng)、商品系統(tǒng)是消費(fèi)的不同的隊(duì)列,此時(shí)支付系統(tǒng)就需要發(fā)送兩條訂單支付成功的MQ消息,為了解決這樣的問題,在RabbitMQ里面通常是先將消息發(fā)送到交換機(jī),然后交換機(jī)再分發(fā)到不同的queue中。

2.2 交換機(jī)

    交換機(jī)(Exchange)是消息的分發(fā)中心,負(fù)責(zé)將接收到的消息路由到一個(gè)或多個(gè)隊(duì)列,如下圖所示:

圖片圖片

    交換機(jī)定義了消息的傳遞規(guī)則,可以根據(jù)規(guī)則將消息發(fā)送到一個(gè)或多個(gè)隊(duì)列上,如下是RabbitMQ的交換機(jī)類型:

(1)直連交換機(jī)(Direct Exchange):將消息路由到與消息中的路由鍵(Routing Key)完全匹配的隊(duì)列。生產(chǎn)者在發(fā)送消息的時(shí)候可以添加一個(gè)routing key,同時(shí)在隊(duì)列中也會(huì)設(shè)置一個(gè)key,如果這兩個(gè)key完全匹配上了,才會(huì)將消息路由到這個(gè)隊(duì)列中。

(2)主題交換機(jī)(Topic Exchange):根據(jù)通配符匹配路由鍵,將消息路由到一個(gè)或多個(gè)隊(duì)列。

(3)扇出交換機(jī)(Fanout Exchange):將消息廣播到所有與交換機(jī)綁定的隊(duì)列,忽略路由鍵。

(4)頭部交換機(jī)(Headers Exchange):根據(jù)消息頭中的屬性進(jìn)行匹配,將消息路由到與消息頭匹配的隊(duì)列。現(xiàn)在使用的比較少,因?yàn)樗男阅鼙容^低。

RabbitMQ的交換機(jī)推薦使用直連交換機(jī)和主題交換機(jī)和扇出交換機(jī)。

2.3 隊(duì)列

    消息隊(duì)列介于生產(chǎn)者和消費(fèi)者,本質(zhì)上就是一個(gè)類似鏈表的獨(dú)立進(jìn)程,列表里的每個(gè)節(jié)點(diǎn)是一個(gè)消息,如下圖所示:

圖片圖片

    實(shí)際的業(yè)務(wù)中,消息也分很多種類,如訂單消息、用戶消息、支付消息等等,為了更好的管理不同種類的消息數(shù)據(jù)進(jìn)而提供多個(gè)隊(duì)列,生產(chǎn)者生產(chǎn)的消息根據(jù)需要被投遞到不同的隊(duì)列中。同時(shí)每個(gè)隊(duì)列都設(shè)計(jì)為獨(dú)立的進(jìn)程,某個(gè)進(jìn)程掛了后不影響其他進(jìn)程正常工作,如下圖所示:

圖片圖片

    消息最終會(huì)被消費(fèi)者從隊(duì)列中取出并處理,每個(gè)隊(duì)列不僅有一個(gè)名稱,并且可以綁定到一個(gè)或多個(gè)交換機(jī)。

2.4 消費(fèi)者

    消費(fèi)者是消息的接收方,負(fù)責(zé)從隊(duì)列中獲取消息并進(jìn)行處理。消費(fèi)者通過訂閱隊(duì)列來接收消息。

2.5 綁定

    綁定是交換機(jī)和隊(duì)列之間的關(guān)聯(lián)關(guān)系。生產(chǎn)者將消息發(fā)送到交換機(jī),隊(duì)列通過綁定與交換機(jī)關(guān)聯(lián),從而接收到消息,如下圖所示:

圖片圖片

2.6 虛擬主機(jī)

    虛擬主機(jī)是RabbitMQ的基本工作單元,每個(gè)虛擬主機(jī)擁有自己獨(dú)立的用戶、權(quán)限、交換機(jī)、隊(duì)列等資源,完全隔離于其他虛擬主機(jī)。

2.7 連接

    連接是指生產(chǎn)者、消費(fèi)者與RabbitMQ之間的網(wǎng)絡(luò)連接。每個(gè)連接可以包含多個(gè)信道(Channel),每個(gè)信道是一個(gè)獨(dú)立的會(huì)話通道,可以進(jìn)行獨(dú)立的消息傳遞。

3、RabbitMQ的消息生產(chǎn)和消費(fèi)過程

圖片圖片

    RabbitMQ中生產(chǎn)者通過長(zhǎng)鏈接的方式連接到Broker,然后生產(chǎn)的消息被發(fā)送到對(duì)應(yīng)的交換機(jī)上,此時(shí)交換機(jī)會(huì)將消息發(fā)送到對(duì)應(yīng)的隊(duì)列上存儲(chǔ),最后消費(fèi)者就會(huì)來拉取消息來進(jìn)行處理,處理成功之后就會(huì)將這個(gè)消息進(jìn)行移除。

責(zé)任編輯:武曉燕 來源: 龍蝦編程
相關(guān)推薦

2013-05-27 10:58:28

Tumblr架構(gòu)設(shè)計(jì)雅虎收購

2023-05-12 08:06:46

Kubernetes多云架構(gòu)

2023-02-24 08:27:56

RabbitMQKafka架構(gòu)

2015-06-02 04:17:44

架構(gòu)設(shè)計(jì)審架構(gòu)設(shè)計(jì)說明書

2025-05-09 08:45:13

2009-07-06 10:36:41

敏捷開發(fā)

2021-11-08 06:57:35

Redis架構(gòu)設(shè)計(jì)

2023-07-05 08:00:52

MetrAuto系統(tǒng)架構(gòu)

2009-01-15 09:43:51

Web架構(gòu)設(shè)計(jì)緩存

2012-05-11 10:38:15

Cloud Found

2015-06-02 04:34:05

架構(gòu)設(shè)計(jì)

2016-01-11 11:20:43

2010-07-14 09:01:07

架構(gòu)設(shè)計(jì)

2021-11-01 21:01:01

架構(gòu)設(shè)計(jì)軟件

2017-05-17 14:51:31

DNS架構(gòu)負(fù)載均衡

2021-05-07 15:27:23

架構(gòu)設(shè)計(jì)架構(gòu)開發(fā)

2016-12-19 11:33:26

2009-07-10 09:31:57

MyEclipse U

2021-07-21 16:30:38

iOSAPP架構(gòu)

2017-11-17 07:06:27

互聯(lián)網(wǎng)分層架構(gòu)APP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩在线国产 | 欧美精产国品一二三区 | 欧美精品在线免费 | 91精品久久久久久久久久 | 亚洲一区二区综合 | 成av在线 | 中文字幕久久久 | 国产精品自拍视频网站 | 丝袜美腿一区 | 97av在线| 成人欧美一区二区三区黑人孕妇 | 国产成人精品高清久久 | 激情av在线 | 欧美一级大片 | 天天干天天操天天射 | 国产欧美一区二区三区日本久久久 | 免费精品 | 在线免费视频一区 | 狠狠夜夜 | 欧美激情欧美激情在线五月 | 人成精品 | 久久高清 | 成人毛片一区二区三区 | 天堂一区 | 狠狠操网站| 鲁视频| 91成人免费看 | a级黄色网 | 欧美亚洲另类在线 | 成人免费观看男女羞羞视频 | 久久久久国产一区二区三区 | 成人黄色电影免费 | 亚洲精品第一国产综合野 | 中文字幕 在线观看 | 国产精品一区二区三区在线 | 国产在线精品一区二区 | 精品美女 | 日韩电影一区 | 视频三区 | 一级毛片视频免费观看 | 久久久国产视频 |