RabbitMQ二三事
RabbitMQ概覽
RabbitMQ
是一個高效能的分散式訊息中介軟體。它由 Erlang 編寫,這種語言天生支援分散式,而且效能極高(但是比較難上手)。
通訊概念
RabbitMQ簡單理解就是一個佇列服務,我們的生產者不斷地往它投遞訊息,而消費者不斷地從它那裡獲取訊息。但相較於利用 redis
的List這類簡單佇列,RabbitMQ的訊息投遞更靈活一點。首先需要知道一些RabbitMQ中的通訊概念:
- Exchange(交換器)
- Queue(佇列)
- Producer(生產者)
- Consumer(消費者)
RabbitMQ中 Exchange
類似於一個路由器,我們的 Consumer
並不會把訊息直接投遞給佇列,而是投遞給 Exchange
, Exchange
根據我們投遞時的路由鍵(routing key)再發送到特定的佇列。這樣的設計讓訊息可以靈活選路,傳送到某一類的佇列中,形成一對多的關係,而不僅僅是一對一。
Exchange
所以說RabbitMQ中的 Exchange
很方便,很強大,它有這樣幾種型別:
- direct
- fanout
- topic
- headers(幾乎用不到)
direct
交換器很簡單,有時候我們僅僅需要一個很簡單的佇列(訊息投遞到其中,然後不斷消費它),這時候我們就可以用 direct
交換器,它的規則是:如果路由鍵匹配,訊息就會被投遞到對應的佇列。
fanout
交換器忽略路由鍵,把訊息 同時 發到一批佇列。
topic
則就是根據不同路由鍵,把訊息傳送到某一類佇列中。