RabbitMQ的介紹
- 1. RabbitMQ的介紹
- 2. RabbitMQ的結構以及每個元件的作用
-
- 2.1 結構介紹
-
- 2.1.1 Product【生産者】
- 2.1.2 Connection【連接配接】
- 2.1.3 channel【信道】
- 2.1.4 Broker【接收分發應用】
- 2.1.5 Virtual Host【 分組AMQP 的基本元件】
- 2.1.6 Exchange【交換機】
- 2.1.7 Queue【隊列】
- 2.1.8 Binding【連接配接exchange 和 queue】
- 3. RabbitMQ的模式
-
- 3.1 簡單模式
- 3.2 工作者模式
- 3.3 釋出訂閱模式
- 3.4 路由模式
- 3.5 topic主體模式
1. RabbitMQ的介紹
RabbitMQ是一種消息中間件,用于處理來自用戶端的異步消息。服務端将要發送的消息放入到隊列池中。接收端可以根據RabbitMQ配置的轉發機制接收服務端發來的消息。RabbitMQ依據指定的轉發規則進行消息的轉發、緩沖和持久化操作,主要用在多伺服器間或單伺服器的子系統間進行通信,是分布式系統标準的配置。
2. RabbitMQ的結構以及每個元件的作用
結構圖

2.1 結構介紹
2.1.1 Product【生産者】
product:使用者生産發送消息,為消費者傳送消息
2.1.2 Connection【連接配接】
Connection:publisher(資訊發送者)/consumer(資訊接受者) 和 broker(接收和分發的應用) 之間的 TCP 連接配接
2.1.3 channel【信道】
Channel:如果每一次通路 RabbitMQ 都建立一個 Connection,在消息量大的時候建立 TCP Connection的開銷将是巨大的,效率也較低。Channel 是在 connection 内部建立的邏輯連接配接,如果應用程式支援多線程,通常每個thread建立單獨的 channel 進行通訊,AMQP method 包含了channel id 幫助用戶端和message broker 識别 channel,是以 channel 之間是完全隔離的。Channel 作為輕量級的 Connection 極大減少了作業系統建立 TCP connection 的開銷
2.1.4 Broker【接收分發應用】
Broker:接收和分發消息的應用,RabbitMQ Server就是 Message Broker
2.1.5 Virtual Host【 分組AMQP 的基本元件】
Virtual host:出于多租戶和安全因素設計的,把 AMQP 的基本元件劃分到一個虛拟的分組中,類似于網絡中的 namespace 概念。當多個不同的使用者使用同一個 RabbitMQ server 提供的服務時,可以劃分出多個vhost,每個使用者在自己的 vhost 建立 exchange/queue 等
2.1.6 Exchange【交換機】
Exchange:message 到達 broker 的第一站,根據分發規則,比對查詢表中的 routing key,分發消息到queue 中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and
fanout (multicast)
2.1.7 Queue【隊列】
Queue:消息最終被送到這裡等待 consumer 取走。消息隻能被存儲在隊列裡。
隊列存儲空間隻受伺服器記憶體和磁盤限制,它本質上是一個大的消息緩沖區。多個生産者可以向同一個隊列發送消息,多個消費者也可以從同一個隊列接收消息.
2.1.8 Binding【連接配接exchange 和 queue】
Binding:exchange 和 queue 之間的虛拟連接配接,binding 中可以包含 routing key。Binding
資訊被儲存到 exchange 中的查詢表中,用于 message 的分發依據
3. RabbitMQ的模式
3.1 簡單模式
從圖上可以看到隻有三個角色:
p 【product】: 生産者 發生消息的
紅色[queue]: 隊列。存儲消息的
C [consumer]: 消費者 消費消息
3.2 工作者模式
特點:
1. 一個生産者
2. 由多個消費。
3. 統一個隊列。
4. 這些消費者之間存在競争關系。
用處:
比如批量處理上. rabbitMQ裡面積壓了大量的消息。
工作隊列(即任務隊列)背後的主要思想是避免立即執行資源密集型任務,并且必須等待它完成。相反,我們将任務安排在稍後完成。
我們将任務封裝為消息并将其發送到隊列。背景運作的工作程序将擷取任務并最終執行任務。當運作多個消費者時,任務将在它們之間分發。
使用任務隊列的一個優點是能夠輕松地并行工作。如果我們正在積壓工作任務,我們可以添加更多工作程序,這樣就可以輕松擴充。
3.3 釋出訂閱模式
特點:
1.一個生産者
2.多個消費者
3.多個隊列。
4.交換機 轉發消息。
向多個消費者傳遞同一條消息。這種模式稱為“釋出/訂閱”
3.4 路由模式
特點:
1. 一個生産者
2. 多個消費者
3. 多個隊列。
4. 交換機 轉發消息。
5. routekey:路由key 隻要routekey比對的消息可以到達對應隊列。
路由模式是通過發送資訊是的 key 與 路由向隊列綁定時設定的 key 值進行比較,key 相同則将消息存入對應的隊列中,否則隊列不存儲該消息
3.5 topic主體模式
綁定按照通配符的模式。
*: 統配一個單詞。
#: 統配n個單詞
主體模式與路由模式相似,但對比的 key 使用通配符進行判斷
RabbitMQ(五)RabbitMQ的五種模式的代碼實作:RabbitMQ中間消息件整理
其他有關RabbitMQ的知識:RabbitMQ中間消息件整理