自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RabbitMQ:RabbitMQ架構(gòu)和工作流程

開源
RabbitMQ,俗稱“兔子MQ”(可見其輕巧,敏捷),是目前非常熱門的一款開源消息中間件,不管 是互聯(lián)網(wǎng)行業(yè)還是傳統(tǒng)行業(yè)都廣泛使用(最早是為了解決電信行業(yè)系統(tǒng)之間的可靠通信而設(shè)計)。

一、介紹

RabbitMQ,俗稱“兔子MQ”(可見其輕巧,敏捷),是目前非常熱門的一款開源消息中間件,不管 是互聯(lián)網(wǎng)行業(yè)還是傳統(tǒng)行業(yè)都廣泛使用(最早是為了解決電信行業(yè)系統(tǒng)之間的可靠通信而設(shè)計)。

1. 高可靠性、易擴(kuò)展、高可用、功能豐富等

2. 支持大多數(shù)(甚至冷門)的編程語言客戶端。

3. RabbitMQ遵循AMQP協(xié)議,自身采用Erlang(一種由愛立信開發(fā)的通用面向并發(fā)編程的語 言)編寫。

4. RabbitMQ也支持MQTT等其他協(xié)議。

RabbitMQ具有很強(qiáng)大的插件擴(kuò)展能力,官方和社區(qū)提供了非常豐富的插件可供選擇:

https://www.rabbitmq.com/community-plugins.html

二、整體邏輯架構(gòu)

1、RabbitMQ Exchange類型

RabbitMQ常用的交換器類型有: fanout 、 direct 、 topic 、 headers 四種。

Fanout

fanout會把所有發(fā)送到該交換器的消息路由到所有與該交換器綁定的隊列中,如圖:

Direct

direct類型的交換器路由規(guī)則很簡單,它會把消息路由到那些BindingKey和RoutingKey完全匹配的 隊列中,如下圖:

Topic

topic類型的交換器在direct匹配規(guī)則上進(jìn)行了擴(kuò)展,也是將消息路由到BindingKey和RoutingKey 相匹配的隊列中,這里的匹配規(guī)則稍微不同,它約定: BindingKey和RoutingKey一樣都是由"."分隔的字符串;BindingKey中可以存在兩種特殊字符“*”和 “#”,用于模糊匹配,其中"*"用于匹配一個單詞,"#"用于匹配多個單詞(可以是0個)。

Headers

headers類型的交換器不依賴于路由鍵的匹配規(guī)則來路由信息,而是根據(jù)發(fā)送的消息內(nèi)容中的 headers屬性進(jìn)行匹配。在綁定隊列和交換器時指定一組鍵值對,當(dāng)發(fā)送的消息到交換器時, RabbitMQ會獲取到該消息的headers,對比其中的鍵值對是否完全匹配隊列和交換器綁定時指定的鍵 值對,如果匹配,消息就會路由到該隊列。headers類型的交換器性能很差,不實用。

2、RabbitMQ數(shù)據(jù)存儲

RabbitMQ消息有兩種類型: 1. 持久化消息和非持久化消息。 2. 這兩種消息都會被寫入磁盤。

持久化消息在到達(dá)隊列時寫入磁盤,同時會內(nèi)存中保存一份備份,當(dāng)內(nèi)存吃緊時,消息從內(nèi)存中清 除。這會提高一定的性能。

非持久化消息一般只存于內(nèi)存中,當(dāng)內(nèi)存壓力大時數(shù)據(jù)刷盤處理,以節(jié)省內(nèi)存空間。

RabbitMQ存儲層包含兩個部分:隊列索引和消息存儲。

三、工作流程

1、生產(chǎn)者發(fā)送消息的流程

1)生產(chǎn)者連接RabbitMQ,建立TCP連接( Connection),開啟信道(Channel)

2)生產(chǎn)者聲明一個Exchange(交換器),并設(shè)置相關(guān)屬性,比如交換器類型、是否持久化等

3)生產(chǎn)者聲明一個隊列井設(shè)置相關(guān)屬性,比如是否排他、是否持久化、是否自動刪除等

4)生產(chǎn)者通過 bindingKey (綁定Key)將交換器和隊列綁定( binding )起來

5)生產(chǎn)者發(fā)送消息至RabbitMQ Broker,其中包含 routingKey (路由鍵)、交換器等信息

6) 相應(yīng)的交換器根據(jù)接收到的 routingKey 查找相匹配的隊列。

7)如果找到,則將從生產(chǎn)者發(fā)送過來的消息存入相應(yīng)的隊列中。

8)如果沒有找到,則根據(jù)生產(chǎn)者配置的屬性選擇丟棄還是回退給生產(chǎn)者

9)關(guān)閉信道。

10)關(guān)閉連接。

2、 消費者接收消息的過程

1) 消費者連接到RabbitMQ Broker ,建立一個連接(Connection ) ,開啟一個信道(Channel) 。

2)消費者向RabbitMQ Broker 請求消費相應(yīng)隊列中的消息,可能會設(shè)置相應(yīng)的回調(diào)函數(shù), 以及 做一些準(zhǔn)備工作

3)等待RabbitMQ Broker 回應(yīng)并投遞相應(yīng)隊列中的消息, 消費者接收消息。

4)消費者確認(rèn)( ack) 接收到的消息。

5)RabbitMQ 從隊列中刪除相應(yīng)已經(jīng)被確認(rèn)的消息。

6)關(guān)閉信道。

7)關(guān)閉連接。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2009-06-05 10:26:05

struts工作流程

2010-09-27 10:19:09

DHCP工作流程

2022-11-02 15:11:44

LightHouseChrome插件

2023-11-20 08:54:38

2011-03-31 10:54:01

Cacti工作流程

2025-04-15 04:00:00

2009-12-14 15:01:31

架構(gòu)師

2010-06-24 16:40:16

Bittorrent協(xié)

2010-07-13 16:21:22

FIX協(xié)議

2010-07-28 17:19:28

ICMP協(xié)議

2010-06-12 17:44:19

ARP協(xié)議

2009-07-27 14:13:15

2011-03-29 09:30:12

Cacti

2022-10-08 07:55:33

DemoMongoDB異步

2020-02-20 16:45:39

RabbitMQKafka架構(gòu)

2010-08-25 09:48:41

DHCP協(xié)議

2010-06-23 14:46:54

DHCP協(xié)議

2010-08-30 09:07:12

DHCP工作流程

2009-08-07 11:10:40

Netbeans ID

2020-01-15 08:52:40

RabbitMQSpringMybatis
點贊
收藏

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