RabbitMQ核心概念
1.RabbitMQ 的概念
RabbitMQ 是一個消息中間件:它接受并轉發消息。你可以把它當做一個快遞站點,當你要發送一個包裹時,你把你的包裹放到快遞站,快遞員最終會把你的快遞送到收件人那里,按照這種邏輯RabbitMQ 是一個快遞站,一個快遞員幫你傳遞快件。 RabbitMQ 與快遞站的主要區別在于,它不處理快件而是接收,存儲和轉發消息數據。
2.四大核心概念
生產者
產生數據發送消息的程序是生產者。
交換機
交換機是 RabbitMQ 非常重要的一個部件,一方面它接收來自生產者的消息,另一方面它將消息推送到隊列中。交換機必須確切知道如何處理它接收到的消息,是將這些消息推送到特定隊列還是推送到多個隊列,亦或者是把消息丟棄,這個得有交換機類型決定。
隊列
隊列是 RabbitMQ 內部使用的一種數據結構,盡管消息流經 RabbitMQ 和應用程序,但它們只能存儲在隊列中。隊列僅受主機的內存和磁盤限制的約束,本質上是一個大的消息緩沖區。許多生產者可以將消息發送到一個隊列,許多消費者可以嘗試從一個隊列接收數據。這就是我們使用隊列的方式。
消費者
消費與接收具有相似的含義。消費者大多時候是一個等待接收消息的程序。請注意生產者,消費者和消息中間件很多時候并不在同一機器上。同一個應用程序既可以是生產者又是可以是消費者。
3.RabbitMQ 核心部分

- Hello Wold 簡單模式
- Work queues 工作隊列模式
- Publish/Subscribe 發布訂閱模式
- Routing 路由模式
- Topics 主題模式
- Publisher Confirms 發布確認模式
4.各個名詞介紹

Broker:接收和分發消息的應用, RabbitMQ Server 就是 Message Broker。
Virtual host:出于多租戶和安全因素設計的,把 AMQP 的基本組件劃分到一個虛擬的分組中,類似于網絡中的 namespace 概念。當多個不同的用戶使用同一個 RabbitMQ server 提供的服務時,可以劃分出多個 vhost,每個用戶在自己的 vhost 創建 exchange/ queue 等。
Connection: publisher/ consumer 和 broker 之間的 TCP 連接。
Channel:如果每一次訪問 RabbitMQ 都建立一個 Connection,在消息量大的時候建立 TCP Connection 的開銷將是巨大的,效率也較低。 Channel 是在 connection 內部建立的邏輯連接,如果應用程序支持多線程,通常每個 thread 創建單獨的 channel 進行通訊, AMQP method 包含了 channel id 幫助客戶端和 message broker 識別 channel,所以 channel 之間是完全隔離的。 Channel 作為輕量級的Connection 極大減少了操作系統建立 TCP connection 的開銷。
Exchange: message 到達 broker 的第一站,根據分發規則,匹配查詢表中的 routing key,分發消息到 queue 中去。常用的類型有: direct (point-to-point), topic (publish-subscribe) and fanout(multicast)。
Queue: 消息最終被送到這里等待 consumer 取走。
Binding: exchange 和 queue 之間的虛擬連接, binding 中可以包含 routing key, Binding 信息被保存到 exchange 中的查詢表中,用于 message 的分發依據。

浙公網安備 33010602011771號