Nodejs操做RabbitMq快速上手

RabbitMQ

場景

  • 應用解耦(異步)
  • 通知
  • 限流
  • 數據分發

概念

  • 生產者 :生產消息
  • 消費者 :接收消息的
  • 消息隊列 : 到達消費者前一刻存儲的地方,由於消息也能夠發給exchangeexchange確定也有存儲消息的地方
  • 通道:創建在鏈接之上
  • Ack回執:收到消息後確認消息已經消費的應答
  • exchange 路由交換
  • routeing key 路由鍵
  • topic 主題

simplest 簡單隊列

簡單隊列模型

'mq簡單隊列'

一個生產者對應一個消費者node

三個角色git

  • 消息生產者 Producer
  • 消息中間件(提供消息隊列) Queue
  • 消費消費者 consumer

Work Queues 工做隊列/任務隊列

工做隊列模型

'任務隊列'

工做隊列(又稱任務隊列)的主要思想是避免當即執行資源密集型任務,而不得不等待它完成。相反,咱們安排任務在之後完成。咱們將任務封裝 爲消息並將其發送到隊列。在後臺運行的工做進程將彈出任務並最終執行做業。當您運行許多工做人員時,任務將在他們之間共享。github

  • 工做隊列 方式派發消息的方式的兩種方式異步

    • 輪詢
    • 任務隊列
      1. 關閉自動回執(ack)
      2. 設置每次接受消息數
      3. 手動回執

Publish/Subscribe 發佈訂閱

發佈訂閱模型

'pubsub'

  1. 一個生產者,多個消費者
  2. 每個消費者都有本身的隊列
  3. 生產者沒有直接把消息發送到隊列 而是發到了交換機 轉發器 exchange
  4. 每個隊列都要綁定到交換機上
  5. 生產者發送的消息 通過交換機 到達隊列 就能實現一個消息被多個消費者消費

x 交換機

消息暫存在交換機,隊列拿着類型來找交換機要消息code

交換類型

  • direct
  • topic
  • headers
  • fanout

'pubsub'

Routing

routeing 模型

'routeing'

pub/sub的基礎上增長了 routeing key,能夠選擇性的接收消息cdn

'routeing'

Topics

Topic模型

'topic'

特殊routeing key字符

  • # (哈希)能夠替代零個或多個單詞。
  • * 能夠代替一個單詞。

exchange 類型必須是topic中間件

'topic'

RPC

'rpc'
RPC 遠程調用服務端的方法,使用 MQ能夠實現 RPC的異步調用,基於 Direct交換機實現

  1. 客戶端便是生產者又是消費者,向RPC請求隊列發送RPC調用消息,同時監聽RPC響應隊列
  2. 服務端監聽RPC請求隊列,收到消息後執行服務端的方法
  3. 服務端將方法執行後的結果發送到RPC響應隊列

消息應答和持久化

消息應答

  • noAck
    • noAck = true 自動確認模式 一旦 mq 將消息把消息分配給消費者,就會從內存中刪除,若是業務方拿到消息並無處理完,消息會丟失。
    • noAck = false 若是消費者掛了,沒有發送回執,那麼這條消息就沒有被消費,會被其餘消費者接收。消費完成必須發送回執,告訴 MQ 已經消費完成,否則會被其餘消費者消費到

持久化

  • MQ是存在內存中的,若是它掛了,咱們的消息依然會丟失!! 可是!!RabbitMQ能夠開啓持久化

github代碼倉庫地址

node_rabbitMQ_mqtutorialblog

相關文章
相關標籤/搜索