RabbitMQ 工作模式

RabbitMQ 一共有 7 中工作模式,可以先去官網上了解一下(一下截圖均來自官網):RabbitMQ 官網

Simple

  • P:生產者,要發送消息的程序;
  • C:消費者,消息的接受者;
  • hello:要發送的消息,這個消息存在在一個隊列中;

“簡單模式”:這種模式的消息只能被消費一次,也稱為“點對點”模式(Point-to-Point),適用于消息只能被單個消費者處理的場景,并且也是最簡單的一種模式。

Work Queue

這中模式叫做“工作隊列模式”,從圖上看就可以發現它是一對多模型,一個生產者,多個消費者,生產者產生的消息是由多個消費者共同消費的,也就是所消息的總量是不會變的,適合集群環境中做異步處理。比如一個訂單服務,下單成功之后,訂單消息就會發送到 RabbitMQ ,然后訂單服務就會從 RabbitMQ 中獲取訂單詳情并進行下一步的處理(在多個訂單服務之間進行分配)。

Publish/Subscribe

這種叫“發布/訂閱模式”,相比于“工作隊列模式”只是在生產者和隊列之間加一層 X (交換機)。

交換機(Exchange)的作用就是將生產者發送的消息按照一定的規則路由到一個或多個隊列中,它只負責轉發消息,不具備存儲消息的能力,因此如果沒有任何隊列與 Exchange 綁定,或者沒有符合路由規則的隊列,那么消息就會丟失;RabbitMQ 的交換機一共有一下幾種類型:

  • fanout:廣播類型,將所有消息交給所有綁定到交換機的隊列(發布/訂閱模式);
  • direct:定向路由類型,把消息交給符合指定 routing key 的隊列;
  • topic:通配符類型,把消息交給符合 routing pattern (路由模式)的隊列;
  • headers:這個類型的交換機不依賴于路由鍵的匹配規則來路由消息,而是根據發送的消息內容中的 headers 屬性進行匹配,但是這個交換機的性能較差使用頻率也少;

這里還有兩個概念就是 RountingKey 和 BindingKey:

  • RoutingKey:路由鍵,生產者將消息發送給交換器的時候會指定路由鍵,然后交換機就會根據這個路由鍵去決定下一步該怎么做;
  • BaindingKey:綁定鍵,通過 BindingKey 將交換機與隊列關聯起來,在綁定的時候一般會指定一個 BindingKey,這樣 RabbitMQ 就可以根據 RoutingKey 和 BindingKey 來正確轉發消息到指定的隊列中;

Routing

這種叫“路由模式”,在“發布/訂閱模式”的基礎上,增加 RoutingKey,發布訂閱模式就是直接把消息全部發送到與交換機關聯的隊列中,沒有其他規則判斷;路由模式下,Exchange 會根據用戶傳過來的 RoutingKey 和交換機與隊列綁定的 BindingKey 進行比較,只有相同的話才會把消息發送到對應對立中,適合需要根據特定規則分發消息的場景;

Topics

這種叫做“通配符模式”,如果理解了上面的“路由模式”的話理解這個應該不難,它比“路由模式”更加靈活,Exchange 可以根據使用通配符的方式對消息路由到指定隊列,比如要是 RoutintKey :test.orange.rabbit 的話,那么 Exchange 會將消息發送到 Q1 和 Q2 中;

RPC

RPC 通訊就是客戶端去遠程調用服務器的服務,在通訊過程中,沒有生產者和消費者;客戶端發送消息到一個指定的隊列(request queue),并在消息屬性中設置 replyTo 字段,這個字段的意思就是指定一個回調隊列用于接收服務端的響應,然后服務端接收到請求之后,處理請求并發送響應消息到 replyTo 指定的回調隊列中,客戶端再再回調隊列上等待響應消息,一旦收到消息,客戶端就會檢查消息的 correlationId 屬性,以確保它是期望的響應,其中?correlationId 的值也是客戶端定義的,然后服務端再根據約定好的規則進行檢查;

Publisher Confirms

“發布確認模式”是 RabbitMQ 提供的一種確保消息可靠發送到 RabbitMQ 服務器的機制。在這中模式下,生產者可以等待 RabbitMQ 服務器的確認,確保消息已經被正確接收并處理:

  • 生產者將 channel 設置為 confirm 模式,發布的每一條消息都會獲得一個唯一的ID,生產者可以將這些序列號與消息關聯起來,用來跟蹤消息的狀態。
  • 當消息被 RabbitMQ 服務器接收并處理后,服務器會異步的向生產者發送一個確認 ACK 給生產者(包含消息的唯一ID),表明消息已經正確到達。

通過 Publisher Confirm 模式,可以避免消息丟失的場景,適合對數據安全性較高的場景如金融交易和訂單處理等等。

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

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

相關文章

VBA會被Python代替嗎

VBA不會完全被Python取代、但Python在自動化、數據分析與跨平臺開發等方面的優勢使其越來越受歡迎、兩者將長期并存且各具優勢。 Python以其易于學習的語法、強大的開源生態系統和跨平臺支持,逐漸成為自動化和數據分析領域的主流工具。然而,VBA依舊在Exc…

【開源工具】深度解析:基于PyQt6的Windows時間校時同步工具開發全攻略

🕒 【開源工具】深度解析:基于PyQt6的Windows時間校時同步工具開發全攻略 🌈 個人主頁:創客白澤 - CSDN博客 🔥 系列專欄:🐍《Python開源項目實戰》 💡 熱愛不止于代碼,熱…

大模型項目:普通藍牙音響接入DeepSeek,解鎖語音交互新玩法

本文附帶視頻講解 【代碼宇宙019】技術方案:藍牙音響接入DeepSeek,解鎖語音交互新玩法_嗶哩嗶哩_bilibili 目錄 效果演示 核心邏輯 技術實現 大模型對話(技術: LangChain4j 接入 DeepSeek) 語音識別(…

qt命名空間演示

#ifndef CIR_H #define CIR_Hnamespace cir {double PI3.141592653;//獲取圓行周長double getLenthOfCircle(double radius){return 2*PI*radius;}//獲取圓形面積double getAreaOfCircle(double radius){return PI*radius*radius;}} #endif // CIR_H#include <iostream> …

使用 Java 反射動態加載和操作類

Java 的反射機制(Reflection)是 Java 語言的一大特色,它允許程序在運行時檢查、加載和操作類、方法、字段等元信息。通過 java.lang.Class 和 java.lang.reflect 包,開發者可以動態加載類、創建實例、調用方法,甚至在運行時構造新類。反射是 Java 靈活性的核心,廣泛應用于…

《 C++ 點滴漫談: 三十七 》左值?右值?完美轉發?C++ 引用的真相超乎你想象!

摘要 本文全面系統地講解了 C 中的引用機制&#xff0c;涵蓋左值引用、右值引用、引用折疊、完美轉發等核心概念&#xff0c;并深入探討其底層實現原理及工程實踐應用。通過詳細的示例與對比&#xff0c;讀者不僅能掌握引用的語法規則和使用技巧&#xff0c;還能理解引用在性能…

【AutoGen深度解析】下一代AI代理編程框架實戰指南

目錄 &#x1f31f; 前言&#x1f3d7;? 技術背景與價值&#x1f6a7; 當前技術痛點&#x1f6e0;? 解決方案概述&#x1f465; 目標讀者說明 &#x1f50d; 一、技術原理剖析&#x1f5bc;? 核心概念圖解&#x1f4a1; 核心作用講解?? 關鍵技術模塊說明&#x1f504; 技術…

Python-AI調用大模型 給出大模型人格案例

Python調用通義千問模擬原神雷電將軍口吻 最近在用AI編輯器寫AI對話 嘗試給AI對話增加人格 以下是使用阿里通義千問大模型模擬《原神》中雷電將軍(雷電影)口吻的代碼案例&#xff0c;包含典型的高傲威嚴、略帶古風的說話風格。 完整后端代碼示例 import dashscope from dash…

csdn博客打賞功能

CSDN_專業開發者社區_已接入DeepSeekR1滿血版 官網: 最右下角 耳機 就是客服 可以轉人工 開啟打賞功能如下: 1.因為博主本人不可以對本人賬號文章進行打賞&#xff0c;因此本人賬號打開文章詳情頁不顯示打賞按鈕。為了驗證賬號設置的打賞功能是否生效所以讓您使用無痕模式模…

【深度學習】目標檢測算法大全

目錄 一、R-CNN 1、R-CNN概述 2、R-CNN 模型總體流程 3、核心模塊詳解 &#xff08;1&#xff09;候選框生成&#xff08;Selective Search&#xff09; &#xff08;2&#xff09;深度特征提取與微調 2.1 特征提取 2.2 網絡微調&#xff08;Fine-tuning&#xff09; …

26考研——中央處理器_指令流水線_指令流水線的基本概念 流水線的基本實現(5)

408答疑 文章目錄 六、指令流水線指令流水線的基本概念流水線的基本實現流水線設計的原則流水線的邏輯結構流水線的時空圖表示 八、參考資料鮑魚科技課件26王道考研書 六、指令流水線 前面介紹的指令都是在單周期處理機中采用串行方法執行的&#xff0c;同一時刻 CPU 中只有一…

配置集群(yarn)

在配置 YARN 集群前&#xff0c;要先完成以下準備工作&#xff1a; 集群環境規劃&#xff1a;明確各節點的角色&#xff0c;如 ResourceManager、NodeManager 等。網絡環境搭建&#xff1a;保證各個節點之間能夠通過網絡互通。時間同步設置&#xff1a;安裝 NTP 服務&#xff0…

vue實現與后臺springboot傳遞數據【傳值/取值 Axios 】

vue實現與后臺springboot傳遞數據【傳值/取值】 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是node.js和vue的使用。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性。【幫幫志系列文章】&#xff1a;每…

二叉樹路徑總和

一、給你二叉樹的根節點 root 和一個表示目標和的整數 targetSum 。判斷該樹中是否存在根節點到葉子節點的路徑&#xff0c;這條路徑上所有節點值相加等于目標和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 112. 路徑總和 - 力扣&…

Matlab 模糊控制平行側邊自動泊車

1、內容簡介 Matlab 233-模糊控制平行側邊自動泊車 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

M0G3507完美移植江科大軟件IIC MPU6050

經過兩天兩夜的查閱文獻資料、整理學習&#xff0c;成功的把江科大的軟件IIC讀寫MPU6050移植到MSPM0G3507&#xff0c;親測有效&#xff01;&#xff01;包的&#xff0c;為了讓大家直觀地感受下&#xff0c;先上圖。記得點個贊哦&#xff01; 學過江科大的STM32的小伙伴是不是…

CI/CD與DevOps流程流程簡述(提供思路)

一 CI/CD流程詳解&#xff1a;代碼集成、測試與發布部署 引言 在軟件開發的世界里&#xff0c;CI/CD&#xff08;持續集成/持續交付&#xff09;就像是一套精密的流水線&#xff0c;確保代碼從開發到上線的整個過程高效、穩定。我作為一名資深的軟件工程師&#xff0c;接下來…

大數據基礎——Ubuntu 安裝

文章目錄 Ubuntu 安裝一、配置電腦二、安裝系統 Ubuntu 安裝 一、配置電腦 1、進入VMware 2、選擇配置類型 3、選擇硬件兼容性版本 4、當前虛擬機的操作系統 選擇“稍后安裝操作系統”&#xff08;修改&#xff09; 5、選擇虛擬機將來需要安裝的系統 選中“Linux”和選擇…

LeetCode百題刷003(449周賽一二題)

遇到的問題都有解決的方案&#xff0c;希望我的博客可以為你提供一些幫助 一、不同字符數量最多為 K 時的最少刪除數 &#xff08;哈希表空間換時間&#xff09; 不同字符數量最多為 K 時的最少刪除數 - 力扣 (LeetCode) 競賽https://leetcode.cn/contest/weekly-contest-449/…

【網安等保】OpenEuler 24.03系統主機安全加固及配置優化實踐指南

[ 知識是人生的燈塔&#xff0c;只有不斷學習&#xff0c;才能照亮前行的道路 ] &#x1f4e2; 大家好&#xff0c;我是 WeiyiGeek&#xff0c;一個正在向全棧工程師(SecDevOps)前進的計算機技術愛好者&#xff0c;歡迎各位道友一起學習交流、一起進步 &#x1f680;&#xff0…