零基礎學習RabbitMQ(5)--工作模式(1)

在前面的章節中我們簡單介紹過一些RabbitMQ的工作模式,RabbitMQ共提供了七種工作模式進行消息傳遞,這里我們來詳細介紹。

1. Simple(簡單模式)

P:生產者

C:消費者

特點:一個生產者一個消費者,消息只能被消費一次,也稱為點對點(Point-to-Point)模式。我們上期寫的示例就是這個模式

適用場景:消息只能被單個消費者處理。

2. Work Queue(工作隊列)?

一個生產者,多個消費者,將消息分給不同的消費者,每個消費者收到不同的消息。

特點:消息不會被重復處理

使用場景:集群環境中做異步處理,例如12306短信通知服務,訂票成功后,訂單消息會發送給RabbitMQ,短信服務從RabbitMQ中獲取訂單信息并發送通知信息?。

3. Publish/Subscribe(發布/訂閱)

?X表示交換機,生產者將消息發送給Exchange,由交換機按一定的規則路由到一個或多個隊列中。

特點:一個生產者多個消費者,生產者發送一條消息,交換機(Fanout)轉發給所有綁定的隊列。

適用場景:消息需要被多個消費者同時接收的場景,如實時通知或者廣播消息。例如電商平臺下單后,同時觸發 “用戶通知”“庫存扣減”“訂單統計” 多個操作。

RabbitMQ有四種類型的交換機,不同類型有不同的路由策略:

  1. Fanout:廣播,將消息交給所有綁定到交換機的隊列(Publish/Subcribe模式)
  2. Direct:定向,把消息交給符合指定routing key的隊列(Routing模式)
  3. Topic:通配符,把消息交給符合routing pattern(路由模式)的隊列(Topics模式)
  4. Headers:headers類型的交換機不依賴于路由鍵的匹配規則來路由消息,而是根據發送的消息內容中的headers屬性進行匹配,headers類型的交換機性能會很差,而且也不實用,基本不會看到它的存在。

Exchange只負責轉發消息,不具備存儲消息的能力,因此如果沒有任何隊列與Exchange綁定,或者沒有符合路由規則的隊列,那么消息就會丟失

注意:簡單模式 和 工作隊列模式 也會使用交換機轉發消息,不會在生產者把消息直接發送給隊列的情況,通常這兩種模式使用的是Direct交換機,routing key通常為隊列名。

  • routing key:路由鍵,生產者將消息發送給交換機時指定的一個字符串,用來告訴交換機把消息轉發到哪個隊列。每個消息只能有一個routing key
  • binding key:綁定,隊列在綁定到交換機時,需要指定 BindingKey 作為匹配規則,只接收routing key對應的消息。一個隊列可以有多個binding key,通過多次綁定實現

?4. Routing(路由模式)

路由模式是發布訂閱模式的變種,在發送訂閱的基礎上,增加routing key,發布訂閱模式是無條件將消息轉發給所有隊列,路由模式Exchange會根據routing key的規則來轉發。

適用場景,需要根據特定規則分發消息的場景,例如系統打印日志,日志等級分為error,warning,info,debug,就可以通過這種模式把不同日志發送到不同的隊列,最終輸出到不同的文件。

5. Topics(通配符模式)

路由模式的升級版,在 Routing的基礎上,增加了通配符的功能,即隊列的bingding key可以寫作通配符的模式來匹配不同的routing key

通配符規則

  • *(星號):匹配一個單詞(如"order.*"匹配"order.create"但不匹配"order.create.success")。
  • #(井號):匹配零個或多個單詞(如"order.#"匹配所有以"order."開頭的 Routing Key)。

適用場景:需要靈活匹配和過濾消息的場景?

6. RPC(RPC通信)?

在PRC通信中,沒有生產者和消費者,通過兩個隊列實現了一個遠程過程調用

  1. 客戶端發送請求:將請求消息發送到服務端隊列,并附帶一個回調隊列地址和唯一請求 ID(correlation ID)。
  2. 服務端處理并響應:接收請求、處理邏輯,然后將結果發送到回調隊列,同時攜帶相同的 correlation ID。
  3. 客戶端匹配響應:根據 correlation ID 將響應與請求關聯,實現 “偽同步” 效果。

?

適用場景:

  • 需要異步解耦但又需即時結果的場景。例如微服務間的輕量級通信。
  • 跨語言服務調用(RabbitMQ 支持多語言客戶端)。

7. Publisher Confirms(發布確認)

Publisher Confirms模式是RabbitMQ提供的一種確保消息可靠發送到RabbitMQ服務器的機制,在這種模式下,生產者可以等待RabbitMQ服務器的確認,確保消息已經被服務器接收并處理。在默認模式下,生產者發送消息后不會收到任何反饋,若網絡故障或交換機異常,消息可能丟失。而發布確認機制可以解決這一問題:

  1. 生產者發送消息:生產者將Channel設置為confirm模式后,發送消息會附帶唯一的序列號(Sequence Number)。
  2. RabbitMQ 確認:交換機收到消息后,異步返回一個確認幀(Confirm Frame),包含相同的序列號。
  3. 生產者處理確認:根據序列號匹配確認結果,標記消息為 “已確認” 或 “未確認”。

適用場景:對數據安全性要求高的場景,例如金融交易,訂單處理?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89160.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Liunx ffmpeg交叉編譯

本文的交叉編譯在window上安裝VMware,使用Ubuntu20.4進行的編譯。 一、安裝NDK: 1、下載解壓: 在NDK 下載 | Android NDK | Android Developers下載Liunx平臺的NDK。 本人下載的是android-ndk-r27c-linux.zip版本的。 解壓android-ndk-r…

極海G32R501雙向數字電源解決方案 賦能AI服務器及電源應用創新

6月26日,Big-Bit商務網主辦的2025中國電子熱點解決方案創新峰會在東莞召開,峰會以“核心智變、能效躍遷”為主題,聚焦光儲充、800V超充、AI服務器、BMS、智能汽車照明與汽車中小電機電控應用。 峰會期間,珠海極海半導體有限公司&a…

【修電腦的小記錄】連不上網

問題概述 問題表現為:電腦連接網絡后,顯示已連接但無法上網。 環境信息: - DNS 修改無效,ping 外網(8.8.8.8)失敗 - 嘗試重置網絡參數、多種命令無果 🔍 排查過程 1. 執行以下命令重置網絡&a…

QT中QSS樣式表的詳細介紹

轉自個人博客 **Qt樣式表(Qt Style Sheets,簡稱QSS)**是一種類似于HTML中的CSS(層疊樣式表)的機制,用于自定義Qt應用程序的外觀。通過QSS,開發者可以輕松地修改控件的外觀,而無需更改…

Spring 依賴注入:官方推薦方式及最佳實踐

Spring 依賴注入:官方推薦方式及最佳實踐 你正在遭遇以下困境嗎? 項目變大后,依賴關系像一團亂麻,牽一發而動全身?單元測試難如登天,被迫啟動整個Spring容器?NullPointerException 總在運行時突…

javaweb聽課筆記day1

MySQL數據模型 關系型數據庫: 通過表來存儲數據 關系型數據庫是建立在關系模型基礎上的數據庫,簡單說,關系型數據庫是由多張能互相連接的二維表組成的數據庫 優點: 都是使用表結構,格式一致,易于維護;使用通用的SQL語言操作…

《從量子奇境到前端優化:解鎖卡西米爾效應的隱藏力量》

卡西米爾效應由荷蘭物理學家亨德里克卡西米爾于1948年提出,它源于量子場論中“真空不空”的奇異觀點。在傳統認知里,真空是一片虛無,但量子理論指出,真空中充滿了持續漲落的能量,即零點能。想象有兩片中性的金屬板被放…

【學習筆記】強化學習的數學原理

軟活硬整,納什又把RL翻出來講了一遍,我以為是溫故而知新,原來是在賣書。 不過溫故而知新還是沒啥毛病的。 PS:今天裝Notepad時看到的,我還以為現在連用個Notepad都要給天線寶寶們捐款了。 文章目錄 PART 11 overview…

深入“火星棒球數據API”:用數據解鎖棒球世界的無限可能

在棒球運動日益數據化的今天,高效獲取和處理海量比賽信息已成為球隊制勝、媒體解讀、球迷深入理解比賽的關鍵。“火星棒球數據API” 應運而生,成為連接棒球智慧與大數據技術的橋梁。本文將探討這一API的核心價值、功能亮點及其如何重塑我們體驗和分析棒球…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+jsp實現的校園服務平臺管理系統,推薦!

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本校園服務平臺管理系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據…

「Java EE開發指南」如何用MyEclipse創建一個WEB項目?(三)

在本文中,您可以找到有關WEB項目的信息。將了解: Web項目結構和參數Web開發生產力工具JSP代碼完成和驗證 這些特性在MyEclipse中可用。在上文中(點擊這里回顧>>),我們為大家介紹了Web開發效率工具、Web項目參數…

笨方法學python -練習6

程序: print("Mary had a little lamb.") print("Its fleece was white as {}.".format(snow)) print("And everywhere that Mary went.") print("." * 10) # what′d that do? end1 "C" end2 "h&qu…

【MySQL】Binlog文件占用空間比較大,如何清理

一、前言 在進行一次數據導入之后,發現服務器磁盤爆滿,初步判斷是數據庫產生了大量binlog所致,接下來進行分析處理。 二、分析 1、查看磁盤空間 通過df -h命令,查看磁盤空間占用情況 2、查找占用文件或目錄 通過命令:…

車載診斷架構 --- 非易失性存儲器(NVM)相關設置項

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

C#: 輸入對話框窗口函數

這是一個 C# 輸入對話框函數,主要功能包括: 基礎功能:創建帶標題、提示文本和輸入框的對話框,返回用戶輸入或空字符串(取消時) 增強特性: 支持必填項驗證支持正則表達式格式驗證實時錯誤提示與…

PCB工藝學習與總結-20250628

一、PCB板材 1、結構組成 基板:作為電路板的支撐體,通常由絕緣材料制成,如玻璃纖維或塑料。 導線:用于連接電路板上的各個元件,傳輸電流和信號。 元件:包括電阻、電容、電感、二極管、晶體管等,用于實現電路的各種功能。 焊盤:用于焊接元件引腳的金屬片,確保元件…

VUE2與VUE3項目環境變量創建與使用區別

環境變量文件是項目中的.env開頭的文件,如下圖: 下圖是VUE2.env文件中的配置,是以VUE_APP開頭的 VUE_APP_PAGE_TITLE系統 VUE_APP_SERVICE_PREFIX/gateway/xxxxx在使用時 只需要 調用 process.env.VUE_APP_SERVICE_PREFIX 就可以獲取到值 而…

php flush實時輸出線上環境好使,本地環境等待一段時間后一次性輸出結果的原因

近期對接deepseek接口時為了擁有較好的用戶體驗,等待答案返回時采用了flush分布輸出,但是線上環境下可以正常分布輸出,同樣代碼在本地總是等待許久后一次性出結果,排查許久,發現竟然是本地和線上不同的php加載模式導致…

【世紀龍科技】東風風光580汽車維護與底盤拆裝檢修仿真教學軟件

在職業院校汽車專業的教學實踐中,傳統的汽車維護與底盤拆裝實訓常面臨諸多挑戰。實車操作不僅存在安全隱患,設備損耗、教學成本高的問題也不容忽視;部分學生因操作機會有限,難以系統掌握規范流程和儀器使用,教師在教學…

React大型項目目錄結構設計

以下這種結構設計適合以下場景: 10人以上開發團隊協作長期維護的中大型項目需要高度模塊化和可擴展性的項目需要嚴格類型檢查的TypeScript項目 根據實際需求,可以適當調整模塊劃分和目錄結構,但保持核心的模塊化思想和分層架構是關鍵。 Re…