天天看點

RabbitMQ——核心概念

 什麼場景下選擇mq,舉個例子:

在電商系統中,商城和物流就是兩個完全獨立的系統,用在在購買完商品之後,商城會生成訂單,之後的流程就是将訂單交給物流系統,由物流系統安排發貨,在使用者完成訂單之後,就不會立即需要之後的任何消息,這種時候就可以使用mq。

對于及時性比較高的功能不建議使用mq,比如使用者下單、付款,都是需要立即給使用者做出響應的,如果稍有延時,就會大大降低使用者的體驗度。

前言

本文主要記錄一下rabbitmq的一些基礎概念,便于日後的學習交流使用.

一、RabbitMQ是什麼?

       RabbitMQ是實作了進階消息隊列協定(AMQP)的開源消息代理軟體(亦稱面向消息的中間件)。RabbitMQ伺服器是用Erlang語言編寫的,而叢集和故障轉移是建構在開放電信平台架構上的。所有主要的程式設計語言均有與代理接口通訊的用戶端。(百度百科)

其中,AMQP是一個具有現代特征的二進制協定。是一個提供統一消息服務的應用層标準進階消息隊列協定,是應用層協定的一個開發标準。為面向消息的中間件設計,AMQP的協定模型如下:

RabbitMQ——核心概念

二、RabbitMQ的應用場景

1. 服務解耦

      多系統、異構系統間的資料交換(消息通知/通訊)問題,也可以把它用于系統間服務的互相調用(RPC)

2. 削峰

      一般在秒殺或團搶活動中使用廣泛,可以緩解短時間内高流量壓垮應用

3.異步化緩沖

将不是必須的業務邏輯,異步處理,如:

使用者在注冊成功時,給使用者發送注冊郵件和短信通知的業務邏輯可以使用rabbitmq異步處理,提升系統的響應速度

三、RabbitMQ的核心概念

1.Server

又稱Broker,接受用戶端的連接配接,實作AMQP實體服務

2.Connection

是RabbitMQ的socket連結(也就是應用程式與Broker之間的網絡連接配接),它封裝了socket協定相關部分邏輯

3.Channel

網絡信道,幾乎所有的操作都在Channel中進行,包括定義Queue、定義Exchange、綁定Queue與Exchange、釋出消息等。

用戶端可建立多個Channel,每個Channel代表一個會話任務。

4.Message

消息,伺服器和應用程式之間傳送的資料,由Properties和Body組成。Properties可以對消息進行修飾,比如消息的優先級、延遲等進階特性;Body則就是消息體内容。

5.Virtual Host

虛拟位址,用于進行邏輯隔離,最上層的消息路由。一個Virtual Host裡面可以有多個Exchange和Queue,同一個Virtual Host不能有相同名稱的Exchange或Queue。

6.Exchange

交換機,接收消息,根據路由鍵(routing key)轉發消息到對應的隊列(Queue)

6.1 交換機的屬性

1、Name:交換機名稱

2、Type:交換機類型:fanout、direct、topic、headers

3、Durability:是否需要持久化,true為持久化

4、Auto Delete:當最後一個綁定到Exchange上的隊列删除後,自動删除該Exchange

5、Internal:目前Exchange是否用于RabbitMQ内部使用,預設為false

6、Arguments:擴充參數,用于擴充AMQP協定自制定化使用

7.Binding

Exchange和Queue之間的虛拟連接配接,binding中可以包含routing key

8.Routing key

消息的路由規則,routing key需要與Exchange Type及binding key聯合使用才能最終生效。

RabbitMQ為routing key設定的長度限制為255 bytes。

9.Queue

也稱Message Queue,消息隊列,儲存消息并轉發給消費者。多個消費者可以訂閱同一個Queue,這時Queue中的消息會被平均分攤給多個消費者進行處理,而不是每個消費者都收到所有的消息并處理。

10.Binding key

在綁定(Binding)Exchange與Queue的同時,一般會指定一個binding key。binding key 依賴于Exchange Type,當routing key比對到對應的Exchange Type下的binding key時,消息則會被路由到對應的Queue中。

11.Exchange Type

RabbitMQ常用的Exchange Type有fanout、direct、topic、headers這四種,head一般不用,在此不做介紹

a)fanout:所有發送到某個Exchange上的消息,都會被路由到綁定了這個Exchange的Queue中

b)direct:發送到某個Exchange上的消息,會被路由到binding key與routing key完全比對的Queue中

c)topic:和direct類似,但是支援通配符‘*’與‘#’,其中‘*’支援比對‘.’後面一個單詞,比如:test.* 可以比對test.a,test.b,test.ab;‘#’可以比對‘.’後面多個單詞(可以是零個),比如:test.#可以比對test.a,test.b,test.a.b

四、RabbitMQ的整體架構

RabbitMQ——核心概念
五、RabbitMQ的消息流轉

RabbitMQ——核心概念

生産者發送消息到broker的exchange,(即使沒有指定具體的exchange,消息也會經過AMQP Default這個exchange)。

消費者在消費消息時是監聽broker上的具體的隊列的。