當前位置:編程學習大全網 - 源碼下載 - 理解 RabbitMQ 工作流程

理解 RabbitMQ 工作流程

RabbitMQ 是基於 AMQP(Advanced Message Queue Protocol 高級消息隊列協議)協議實現的消息隊列中間件,協議的基本模型結構如下圖:

從圖中可以看出 AMQP 協議主要包含如下幾個部分:

結合上邊的內容,我們可以大致的描述出 RabbitMQ 的工作流程:生產者(Producer)與消費者(Consumer)和 RabbitMQ 服務(Broker)建立連接, 然後生產者發布消息(Message)同時需要攜帶交換機(Exchange) 名稱以及路由規則(Routing Key),這樣消息會到達指定的交換機,然後交換機根據路由規則匹配對應的 Binding,最終將消息發送到匹配的消息隊列(Quene),最後 RabbitMQ 服務將隊列中的消息投遞給訂閱了該隊列的消費者(消費者也可以主動拉取消息)。

前邊我們已經了解到,壹個 Exchange 可以綁定多個 Queue, Exchange 接收生產者發送的消息,然後將消息按照路由規則投放到指定的 Queue 中。接下來我們需要了解這個路由規則具體是什麽樣的,它是如何決定 Exchange 將消息發送到那個 Queue。

Binding 代表壹個 Exchange 和壹個 Queue 的綁定關系,這個綁定關系上可以附件壹個參數 Routing Key,Exchange 會根據發送消息時攜帶的 Routing Key 去和該 Exchange 所有相關的 Binding 匹配,如果匹配到了,就將消息發送給 Binding 中綁定的 Queue。

上邊是壹個相對通用的流程,可以幫助我們理解交換機的工作原理,當然也存在壹些特殊的情況後邊會提到。

在 RabbitMQ 中,Exchange 主要分為: Fanout Excahnge 、 Direct Exchange 、 Topic Exchange 、 Default Exchange 、 Headers Exchange ,同時 Routing Key 結合不同類型的 Exchange 使用時,用法也有所不同。

使用 Fanout Exchange 時,會忽略 Routing Key,所以我們也就沒必要在綁定 Exchange 和 Queue,以及發送消息時去設置 Routing Key 了,Exchange 直接將消息發送到和它綁定的所有 Queue 中,省略了 Routing Key 匹配的環節。

在 RabbitMQ 中默認使用的是 Direct Exchange,Exchange 和 Queue 綁定時需要指定 Routing Key,發送消息時也需要攜帶 Routing Key,這樣 Exchange 收到消息後就可以根據 Routing Key 匹配到對應的 Binding,進而將消息發送到目標隊列裏。註意這裏的 Routing Key 是需要精確匹配的。

Topic Exchange 和 Direct Exchange 的用法很類似,區別在於 Topic Exchange 中的 Routing Key 是支持模糊匹配的。提供了兩個通配符:

這樣綁定 Exchange 綁定 Queue1、Queue2、Queue3 時指定 Routing Key 分別為 *.red.# 、 #.blue.# 、 green.* ,這樣發送消息是如果攜帶的 Routing Key 為 green.red ,最終可以匹配到 Queue1、Queue3。

Default Exchange 是壹種特殊的 Direct Exchange,使用它時,我們只需要創建壹個 Queue 即可,RabbitMQ 服務會自動將 Queue 和壹個名稱為空的默認的 Exchange 綁定,同時將 Routing Key 指定為 Queue 的名稱。這種 Exchange 簡化了使用步驟,但也不夠靈活,不好做實際的業務劃分,可以用來完成壹些簡單的需求。

Headers Exchange 不使用 Routing Key 來匹配目標 Queue,而是綁定 Exchange 和 Queue 時需要指定額外的 Arguments 參數,發送消息時攜帶上對應的參數來實現匹配。這種 Exchange 用的比較少,了解即可。

壹般情況下使用 Fanout Excahnge 、 Direct Exchange 就能滿足業務需求了。

  • 上一篇:包裹源代碼的生成
  • 下一篇:oppo的手機,“開放源代碼許可”是什麽意思?我不小心按到了,有沒有什麽影響?
  • copyright 2024編程學習大全網