【RabbitMQ】核心概念

煎雞蛋湯發表於2018-07-01

讓我們從RabbitMQ官網的一段話開始:

RabbitMQ is the most widely deployed open source message broker.

簡言之,RabbitMQ是開源的訊息佇列。將A君的訊息,傳送給B君,不過這裡的B君,不單指某一個具體的例項,可能是一群例項

這篇文章來講一講RabbitMQ的幾個核心概念

  • Producer
  • Message
  • Exchange
  • Queue
  • Consumer

概述

我們先看看幾個核心概念的關係,如下圖:
這裡寫圖片描述

從上圖中可以看到:

  • Producer將訊息傳送到Exchange
  • Exchange根據Binding關係,將訊息送到0~n個Queue
  • Consumer從Queue中得到訊息

下面詳細講解每個概念

Producer

首先來看看Producer(生產者),顧名思義,生產訊息的例項。需要注意的是:在程式碼實現上,並沒有Producer和Consumer抽象概念。Producer是指呼叫RabbitMQ API傳送訊息的例項,Consumer是指呼叫RabbitMQ API接收訊息的例項,僅僅是為了方便描述,或者可以說成,僅僅是邏輯上的概念

Producer、Message、Exchange三者之間的關係如下圖
這裡寫圖片描述

即:

  • 一個Producer可以向不同的Exchange傳送訊息
  • 一個Producer可以向任何一個Exchange傳送多條訊息

Message

其次要講的是Message,Message Broker當然離不開Message,沒了Message,那就不是Message Broker了,只能是其他的什麼Broker。Message有多種格式,比如:

  • text/plain
  • application/json
  • ……

Exchange

Exchange就是一個交易所,會有很多的Message進入到Exchange中,Exchange根據Binding key(或者叫Routing key)將Message分發到不同的Queue中

RabbitMQ中的Exchange有多種型別,型別不同,Message的分發機制不同,如下:

  • fanout,廣播模式。這種型別的Exchange會將Message分發到繫結到該Exchange的所有Queue
  • direct,這種型別的Exchange會根據Routing key(精確匹配)將Message分發到指定的Queue
  • topic,這種型別的Exchange會根據Routing key(模糊匹配)將Message分發到指定的Queue

fanout

這裡寫圖片描述

direct

這裡寫圖片描述

topic

這裡寫圖片描述

Queue

Queue,佇列,訊息暫時存放的地方

Consumer

Consumer,消費者,接收訊息的例項

相關文章