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

RabbitMQ的架構設計

開發 前端
RabbitMQ中生產者通過長鏈接的方式連接到Broker,然后生產的消息被發送到對應的交換機上,此時交換機會將消息發送到對應的隊列上存儲,最后消費者就會來拉取消息來進行處理,處理成功之后就會將這個消息進行移除。

Kafka、RocketMq、ActiveMQ、RabbitMQ和Apache Pulsar都是現在使用的比較多的主流MQ,下面我們來介紹RabbitMQ的架構設計。

    RabbitMQ使用Erlang語言開發消息隊列系統,基于AMQP協議(高級消息隊列協議)實現的一個開源的消息中間件,它允許應用程序之間進行異步通信,并且RabbitMQ提供了一種高效、可擴展、可靠的消息傳遞機制。

1、RabbitMQ的架構

    RabbitMQ有生產者和消費者,并且生產者和消費者之間是通過RabbitMQ Server來進行連接的,這樣的異步通訊方式使得生產者和消費者之間沒有強關聯,RabbitMQ的架構圖如下所示:

圖片圖片

    RabbitMQ中有虛擬機(Virtual Host),虛擬機的作用是在一個完整的微服務架構可以使用同一個套RabbitMQ服務,在不同的微服務之間是根據虛擬機來進行區分的,如訂單系統使用一個虛擬機,商品系統使用自己的虛擬機,這樣不同的微服務使用它自己的虛擬機即可。

    同時虛擬機與虛擬機之間的數據是相互隔離,并不會互相產生影響,在虛擬機里面就存在了交換機(Exchange)和隊列(queue)。

    RabbitMQ與生產者、消費者之間的連接是通過多個信道實現的,信道是建立在Connection之上的虛擬連接,當應用程序與RabbitMQ Broker建立TCP連接的時候,客戶端緊接著可以創建一個AMQP信道(Channel),每個信道都會被指派一個唯一的ID,RabbitMQ是使用長連接來處理請求。

2、RabbitMQ的組件

2.1 生產者

    生產者是消息的發送方,它主要是負責產生并發送消息到RabbitMQ,生產者通常將消息發送到交換機(Exchange),如下圖所示:

圖片圖片

    為什么RabbitMQ將消息發送到交換機呢?假設RabbitMQ直接將消息投遞到隊列,如下圖所示:

圖片圖片

    在電商系統中如果用戶支付成功之后,需要通知訂單系統修改訂單的訂單狀態,通知商品系統扣減商品的庫存,此時支付系統的作為消息的生產者就需要通知消費者訂單系統和商品系統。

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

2.2 交換機

    交換機(Exchange)是消息的分發中心,負責將接收到的消息路由到一個或多個隊列,如下圖所示:

圖片圖片

    交換機定義了消息的傳遞規則,可以根據規則將消息發送到一個或多個隊列上,如下是RabbitMQ的交換機類型:

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

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

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

(4)頭部交換機(Headers Exchange):根據消息頭中的屬性進行匹配,將消息路由到與消息頭匹配的隊列。現在使用的比較少,因為它的性能比較低。

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

2.3 隊列

    消息隊列介于生產者和消費者,本質上就是一個類似鏈表的獨立進程,列表里的每個節點是一個消息,如下圖所示:

圖片圖片

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

圖片圖片

    消息最終會被消費者從隊列中取出并處理,每個隊列不僅有一個名稱,并且可以綁定到一個或多個交換機。

2.4 消費者

    消費者是消息的接收方,負責從隊列中獲取消息并進行處理。消費者通過訂閱隊列來接收消息。

2.5 綁定

    綁定是交換機和隊列之間的關聯關系。生產者將消息發送到交換機,隊列通過綁定與交換機關聯,從而接收到消息,如下圖所示:

圖片圖片

2.6 虛擬主機

    虛擬主機是RabbitMQ的基本工作單元,每個虛擬主機擁有自己獨立的用戶、權限、交換機、隊列等資源,完全隔離于其他虛擬主機。

2.7 連接

    連接是指生產者、消費者與RabbitMQ之間的網絡連接。每個連接可以包含多個信道(Channel),每個信道是一個獨立的會話通道,可以進行獨立的消息傳遞。

3、RabbitMQ的消息生產和消費過程

圖片圖片

    RabbitMQ中生產者通過長鏈接的方式連接到Broker,然后生產的消息被發送到對應的交換機上,此時交換機會將消息發送到對應的隊列上存儲,最后消費者就會來拉取消息來進行處理,處理成功之后就會將這個消息進行移除。

責任編輯:武曉燕 來源: 龍蝦編程
相關推薦

2013-05-27 10:58:28

Tumblr架構設計雅虎收購

2023-05-12 08:06:46

Kubernetes多云架構

2023-02-24 08:27:56

RabbitMQKafka架構

2015-06-02 04:17:44

架構設計審架構設計說明書

2023-07-05 08:00:52

MetrAuto系統架構

2025-05-09 08:45:13

2009-07-06 10:36:41

敏捷開發

2021-11-08 06:57:35

Redis架構設計

2009-01-15 09:43:51

Web架構設計緩存

2012-05-11 10:38:15

Cloud Found

2015-06-02 04:34:05

架構設計

2016-01-11 11:20:43

2010-07-14 09:01:07

架構設計

2021-11-01 21:01:01

架構設計軟件

2016-12-19 11:33:26

2021-05-07 15:27:23

架構設計架構開發

2017-05-17 14:51:31

DNS架構負載均衡

2025-03-04 00:00:33

2024-02-20 09:25:28

架構設計系統

2024-12-06 08:59:08

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频区 | 免费1区2区3区 | 欧美在线亚洲 | 欧美精品一区二区免费 | 一级毛片在线播放 | 国产精品久久久99 | 亚洲日本免费 | 成人福利网 | 日韩欧美在线一区 | 久久久毛片 | 插插插干干干 | 99精品视频在线观看免费播放 | 国产精品九九 | 欧美日韩淫片 | 一区二区三区欧美在线 | 日本 欧美 国产 | 久久精品免费 | japanhd成人| 免费成人在线网站 | 久久久国产网站 | 精品视频在线免费观看 | 日本五月婷婷 | 日韩欧美亚洲 | 亚洲精品一区二区三区免 | 国产乱码精品1区2区3区 | 欧美日韩一区不卡 | 中文字幕av一区二区三区 | 在线色网 | 一级黄色短片 | 三级免费| 亚洲国产成人av好男人在线观看 | 亚洲一区二区三区在线视频 | 一区二区三区不卡视频 | 日韩av黄色| 国产欧美久久一区二区三区 | 欧美精品在线播放 | 成人一级视频在线观看 | 成人在线视频一区 | 成年人视频在线免费观看 | 亚洲高清视频在线观看 | 天天色影视综合 |