RabbitMQ(一)rabbitMQ簡介

1、RabbitMQ 的優點

  • 基於 ErLang 語言開發具有高可用高併發的優點,適合輯羣服務器
  • 健壯、穩定、易用、跨平臺、支持多種語言、文檔齊全
  • 有消息確認機制和持久化機制,可靠性高
  • 開源

2、RabbitMQ 的概念

生產者和消費者

Producer:消息的生產者
Consumer:消息的消費者

Queue(隊列)

消息隊列,提供了 FIFO(先進先出) 的處理機制,具有緩存消息的能力。

  • RabbitMQ 中,隊列消息可以設置爲持久化,臨時或者自動刪除。設置爲持久化的隊列,Queue 中的消息會在 Server
    本地硬盤存儲一份,防止系統 Crash,數據丟失。
  • 設置爲臨時隊列,Queue 中的數據在系統重啓之後就會丟失
  • 設置爲自動刪除的隊列,當不存在用戶連接到Server,隊列中的數據會被自動刪除

ExChange(交換機)

Exchange 類似於數據通信網絡中的交換機,提供消息路由策略。RabbitMQ 中,Producer 不是通過信道直接將消息發送給 Queue,而是先發送給 ExChange。
一個 ExChange 可以和多個 Queue 進行綁定,Producer 在傳遞消息的時候,會傳遞一個 ROUTING_KEY,ExChange 會根據這個 ROUTING_KEY 按照特定的路由算法,將消息路由給指定的 Queue。
和 Queue 一樣,ExChange 也可設置爲持久化,臨時或者自動刪除

ExChange 的 4 種類型

  • direct(默認):直接交換器,工作方式類似於單播,ExChange 會將消息發送完全匹配 ROUTING_KEY 的Queue(key 就等於 queue)
  • fanout:廣播式交換器,不管消息的 ROUTING_KEY 設置爲 什麼,ExChange 都會將消息轉發給所有綁定的 Queue(無視 key,給所有的 queue 都來一份)
  • topic:主題交換器,工作方式類似於組播,ExChange 會將消息轉發和 ROUTING_KEY 匹配模式相同的所有隊列(key可以用“寬字符”模糊匹配 queue),比如,ROUTING_KEY 爲 user.stock 的 Message 會轉發給綁定匹配模式爲 .stock,user.stock, * . * 和 #.user.stock.# 的隊列。( * 表是匹配一個任意詞組,# 表示匹配 0 個或多個詞組)
  • headers:消息體的 header 匹配,無視 key,通過查看消息的頭部元數據來決定發給那個 queue(AMQP 頭部元數據非常豐富而且可以自定義)

Binding(綁定)

所謂綁定就是將一個特定的 ExChange 和一個特定的 Queue 綁定起來。ExChange 和 Queue 的綁定可以是多對多的關係

Virtual Host(虛擬主機)

在 RabbitMQ Server 上可以創建多個虛擬的 Message Broker,又叫做 Virtual Hosts (vhosts)。
每一個 vhost 本質上是一個 mini-rabbitmq server,分別管理各自的 ExChange,和 bindings。
vhost 相當於物理的 Server,可以爲不同 app 提供邊界隔離,使得應用安全的運行在不同的 vhost 實例上,相互之間不會干擾。Producer 和 Consumer 連接 rabbit server 需要指定一個 vhost

RabbitMQ 的使用過程

  • 客戶端連接到消息隊列服務器,打開一個 Channel。
  • 客戶端聲明一個 ExChange,並設置相關屬性。
  • 客戶端聲明一個Queue,並設置相關屬性。
  • 客戶端使用 Routing Key,在 ExChange 和 Queue 之間建立好綁定關係。
  • 客戶端投遞消息到 ExChange。
  • ExChange 接收到消息後,就根據消息的 key 和已經設置的 binding,進行消息路由,將消息投遞到一個或多個隊列裏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章