天天看點

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. RabbitMQ的模式

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的結構以及每個元件的作用

結構圖

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. 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 簡單模式

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. RabbitMQ的模式

從圖上可以看到隻有三個角色:

p 【product】: 生産者 發生消息的

紅色[queue]: 隊列。存儲消息的

C [consumer]: 消費者 消費消息

3.2 工作者模式

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. RabbitMQ的模式

特點:

   1. 一個生産者

   2. 由多個消費。

   3. 統一個隊列。

   4. 這些消費者之間存在競争關系。

用處:

   比如批量處理上. rabbitMQ裡面積壓了大量的消息。

  工作隊列(即任務隊列)背後的主要思想是避免立即執行資源密集型任務,并且必須等待它完成。相反,我們将任務安排在稍後完成。

  我們将任務封裝為消息并将其發送到隊列。背景運作的工作程序将擷取任務并最終執行任務。當運作多個消費者時,任務将在它們之間分發。

  使用任務隊列的一個優點是能夠輕松地并行工作。如果我們正在積壓工作任務,我們可以添加更多工作程序,這樣就可以輕松擴充。

3.3 釋出訂閱模式

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. RabbitMQ的模式

特點:

   1.一個生産者

   2.多個消費者

   3.多個隊列。

   4.交換機 轉發消息。

向多個消費者傳遞同一條消息。這種模式稱為“釋出/訂閱”

3.4 路由模式

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. RabbitMQ的模式

特點:

   1. 一個生産者

   2. 多個消費者

   3. 多個隊列。

   4. 交換機 轉發消息。

   5. routekey:路由key 隻要routekey比對的消息可以到達對應隊列。

路由模式是通過發送資訊是的 key 與 路由向隊列綁定時設定的 key 值進行比較,key 相同則将消息存入對應的隊列中,否則隊列不存儲該消息

3.5 topic主體模式

RabbitMQ(三)RabbitMQ的介紹和RabbitMQ的五種模式1. RabbitMQ的介紹2. RabbitMQ的結構以及每個元件的作用3. RabbitMQ的模式

綁定按照通配符的模式。

   *: 統配一個單詞。

   #: 統配n個單詞

主體模式與路由模式相似,但對比的 key 使用通配符進行判斷

RabbitMQ(五)RabbitMQ的五種模式的代碼實作:RabbitMQ中間消息件整理

其他有關RabbitMQ的知識:RabbitMQ中間消息件整理