天天看點

RabbitMQ(一)概述

1 RabbitMQ 概念

RabbitMQ 是一個消息中間件:它接受并轉發消息。你可以把它當做一個快遞站點,當你要發送一個包裹時,你把你的包裹放到快遞站,快遞員最終會把你的快遞送到收件人那裡,按照這種邏輯 RabbitMQ 是一個快遞站,一個快遞員幫你傳遞快件。 RabbitMQ 與快遞站的主要差別在于,它不處理快件而是接收,存儲和轉發消息資料。

2 四大核心概念

2.1 生産者(Producer)

産生資料發送消息的程式是生産者

2.2 交換機(Exchange)

交換機是 RabbitMQ 非常重要的一個部件,一方面它接收來自生産者的消息,另一方面它将消息推送到隊列中。交換機必須确切知道如何處理它接收到的消息,是将這些消息推送到特定隊列還是推送到多個隊列,亦或者是把消息丢棄,這個得有交換機類型決定

2.3 隊列(Queue)

隊列是 RabbitMQ 内部使用的一種資料結構, 盡管消息流經 RabbitMQ 和應用程式,但它們隻能存儲在隊列中。隊列僅受主機的記憶體和磁盤限制的限制,本質上是一個大的消息緩沖區。許多生産者可以将消息發送到一個隊列,許多消費者可以嘗試從一個隊列接收資料。這就是我們使用隊列的方式

2.4 消費者(Consumer)

3 架構介紹

  • 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 的分發依據

繼續閱讀