篇章三 需求分析(二)

目錄

1.核心API

2.交換機類型

3.持久化

4.網絡通信

5.小結


1.核心API

消息隊列服務器(Broker Server),要提供的核心API?

1.創建隊列(queueDeclare)

此處不使用 Create 這樣的術語,而是使用 Declare,是因為:

Create 就只是單純的“創建”

Declare 起到的效果:不存在就創建,存在就什么都不做

2.銷毀隊列(queueDelete)

3.創建交換機(exchangeDeclare)

4.銷毀交換機(exchangeDelete)

5.創建綁定(queueBind)

6.解除綁定(queueUnbind)

7.發布消息(basicPublish)

8.訂閱消息(basicConsume)

9.確認消息(basicAck)

與TCP通過確認應答類似:

? ? ? ? 這個API起到的效果,是可以讓消費者顯式的告訴broker server,這個消息我已經處理完畢了

? ? ? ? 提高整個系統的可靠性,保證消息處理沒有遺漏

問題:為什么沒有消費消息的API?

對于MQ和消費者之間的工作模式,有兩種:

1.Push(推) Broker 把收到的數據 ,主動發給訂閱的消費者。RabbitMQ只支持 推 的方式。

2.Pull(拉)消費者主動調用Broker 的 API 取數據。Kafka就能支持拉。

2.交換機類型

????????交換機在轉發消息的時候,有一套轉發的規則。提供幾種不同的交換機類型(ExchangeType)來描述不同的轉發規則。

RabbitMQ主要實現了 四種 交換機類型 (AMPQ協議定義)

1.Direct?直接交換機

2.Fanout 扇出交換機

3.Topic 主題交換機

4.Header 消息頭交換機? (規則復雜,應用場景少)

1.Direct直接交換機

????????生產者發送消息的時候,就會指定“目標隊列”的名字。交換機收到之后,就看綁定的隊列里有沒有匹配的隊列,如果有轉發過去(把消息塞到對應的隊列中),如果沒有就丟棄。

2.Fanout扇出交換機

????????生產者發送消息,交換機收到之后,就把消息轉發給綁定的所有隊列。

3.Topic主題交換機

關鍵概念:

1.bindingKey:把隊列和交換機綁定的時候,指定一個單詞(像一個暗號)

2.routingKey:生產者發送消息的時候,也指定一個單詞

如果當前bindingKey和routingKey 能夠對上暗號,此時就把這個消息轉發到對應的隊列里。

3.持久化

????????虛擬主機,交換機,隊列,綁定,消息等都需要Broker Server 組織管理。所以這些對應的數據需要存儲和管理起來。此時內存和硬盤都會各自存儲一份,以內存為主,硬盤為輔

內存存儲的原因:

? ? ? ? 對于MQ來說,能夠高效的轉發處理數據,是非常關鍵的指標。因此使用內存來組織上述數據,得到的效率,就比硬盤中高的多。

硬盤存儲的原因:

? ? ? ? 為了防止內存的數據隨著 進程重啟/主機重啟 丟失。

4.網絡通信

其他服務器(生產者/消費者)通過網絡,與Broker Server進行交互。

此處采用:TCP + 自定義應用層協議 實現 生產者/消費者 和Broker Server 之間的交互工作

主要工作:

????????客戶端通過網絡調用Broker Server 提供的編程接口,所以客戶端這邊也要提供上述API,只不過服務器的上述API是真正的業務邏輯,客戶端這邊僅僅知識發送請求和接收響應。

雖然調用的是本地方法,實際上就像似調用了一個遠端服務器方法一樣 -> 遠程過程調用(RPC

遠程過程調用(RPC):

? ? ? ? 簡單解釋:可以視為編寫客戶端服務器程序,通信過程的一種設計思想。

5.小結

通過需求分析的出具體要做的事情:

1.需要實現生產者 , Broker Server,消費者三部分。

?生產者和消費者,主要編寫客戶端和服務器的網絡通信部分。消費者和生產者具體的業務邏輯并不關心,給客戶端一組API,讓客戶端的業務代碼通過網絡通信來調用Broker Server上的方法即可。

2.實現Broker Server 以及 Broker Server 內部的一些基本概念和核心API

3.持久化

把上述這些關鍵數據,在硬盤中的存儲。

解決存儲在數據庫/文件中,以及后續服務器重啟重新獲取上述數據的問題。

最終目標:

實現一個分布式系統下的生產者消費者模型(不支持分布式部署功能),只是一個單機的Broker Server,但是能給多個生產者消費者服務。

專業的 MQ 都是支持集群的

優點:

1.提高可用性

2.處理更高的并發

3.數據互相備份

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

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

相關文章

打造高效數據處理利器:用Python實現Excel文件智能合并工具

有時候,我們需要將多個Excel文件按照特定順序合并成一個文件,這樣可以更方便地進行后續的數據處理和分析。今天,我想分享一個使用Python開發的小工具,它可以幫助我們輕松實現Excel文件的智能合并。C:\pythoncode\new\xlsx_merger.…

StepX-Edit:一個通用圖像編輯框架——論文閱讀筆記

一. 前言 代碼:https://github.com/stepfun-ai/Step1X-Edit 論文:https://arxiv.org/abs/2504.17761 近年來,圖像編輯技術發展迅速,GPT- 4o、Gemini2 Flash等前沿多模態模型的推出,展現了圖像編輯能力的巨大潛力。 這…

第9.1講、Tiny Encoder Transformer:極簡文本分類與注意力可視化實戰

項目簡介 本項目實現了一個極簡版的 Transformer Encoder 文本分類器,并通過 Streamlit 提供了交互式可視化界面。用戶可以輸入任意文本,實時查看模型的分類結果及注意力權重熱力圖,直觀理解 Transformer 的內部機制。項目采用 HuggingFace …

【Java】泛型在 Java 中是怎樣實現的?

先說結論 , Java 的泛型是偽泛型 , 在運行期間不存在泛型的概念 , 泛型在 Java 中是 編譯檢查 運行強轉 實現的 泛型是指 允許在定義類 , 接口和方法時使用的類型參數 , 使得代碼可以在不指定具體類型的情況下操作不同的數據類型 , 從而實現類型安全的代碼復用 的語言機制 . …

linux如何查找軟連接的實際地址

在Linux系統中,查找軟連接(符號鏈接,即symbolic link)的實際地址可以通過多種方法實現。軟連接是一個特殊的文件類型,它包含了一個指向另一個文件或目錄的引用。要找到軟連接所指向的實際文件或目錄,可以使…

Token類型與用途詳解:數字身份的安全載體圖譜

在現代數字身份體系中,Token如同"數字DNA",以不同形態流轉于各類應用場景。根據Okta的最新研究報告,平均每個企業應用使用2.7種不同類型的Token實現身份驗證和授權。本文將系統梳理主流Token類型及其應用場景,通過行業典…

火山 RTC 引擎9 ----集成 appkey

一、集成 appkey 1、網易RTC 初始化過程 1)、添加頭文件 實現互動直播 - 互動直播 2.0網易云信互動直播產品的基本功能包括音視頻通話和連麥直播,當您成功初始化 SDK 之后,您可以簡單體驗本產品的基本業務流程,例如主播加入房間…

詳細介紹Qwen3技術報告中提到的模型架構技術

詳細介紹Qwen3技術報告中提到的一些主流模型架構技術,并為核心流程配上相關的LaTeX公式。 這些技術都是當前大型語言模型(LLM)領域為了提升模型性能、訓練效率、推理速度或穩定性而采用的關鍵組件。 1. Grouped Query Attention (GQA) - 分組…

光電效應理論與實驗 | 從愛因斯坦光量子假說到普朗克常量測定

注:本文為“光電效應”相關文章合輯。 英文引文,機翻未校。 中文引文,略作重排,未整理去重。 圖片清晰度受引文原圖所限。 如有內容異常,請看原文。 Photoelectric Effect 光電效應 Discussion dilemma Under the…

Visual Studio 2019/2022:當前不會命中斷點,還沒有為該文檔加載任何符號。

1、打開調試的模塊窗口,該窗口一定要在調試狀態下才會顯示。 vs2019打開調試的模塊窗口 2、Visual Studio 2019提示未使用調試信息生成二進制文件 未使用調試信息生成二進制文件 3、然后到debug目錄下看下確實未生成CoreCms.Net.Web.WebApi.pdb文件。 那下面的…

打破性能瓶頸:用DBB重參數化模塊優化YOLOv8檢測頭

文章目錄 引言DBB 重參數化模塊簡介DBB 的優勢 YOLOv8 檢測頭的結構分析使用 DBB 模塊魔改檢測頭替換策略代碼實現改進后的效果預期 實驗與驗證總結與展望 引言 在目標檢測領域,YOLO 系列算法一直以其高效的檢測速度和不錯的檢測精度受到廣泛關注。隨著版本的不斷更…

如何成為更好的自己?

成為更好的自己是一個持續成長的過程,需要結合自我認知、目標規劃和行動力。以下是一些具體建議,幫助你逐步提升: 1. 自我覺察:認識自己 反思與復盤:每天花10分鐘記錄當天的決策、情緒和行為,分析哪些做得…

免費使用GPU的探索筆記

多種有免費時長的平臺 https://www.cnblogs.com/java-note/p/18760386 Kaggle免費使用GPU的探索 https://www.kaggle.com/ 注冊Kaggle賬號 訪問Kaggle官網,使用郵箱注冊賬號。 發現gpu都是灰色的 返回home,右上角的頭像點開 驗證手機號 再次code-you…

CSS- 4.2 相對定位(position: relative)

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看! 點…

如何使用Antv X6使用拖拽布局?

拖拽效果圖 拖拽后 布局預覽 官方: X6 圖編輯引擎 | AntV 安裝依賴 # npm npm install antv/x6 --save npm install antv/x6-plugin-dnd --save npm install antv/x6-plugin-export --save需要引入的代碼 import { Graph, Shape } from antv/x6; import { Dnd } …

數據庫健康監測器(BHM)實戰:如何通過 HTML 報告識別潛在問題

在數據庫運維中,健康監測是保障系統穩定性與性能的關鍵環節。通過 HTML 報告,開發者可以直觀查看數據庫的運行狀態、資源使用情況與潛在風險。 本文將圍繞 數據庫健康監測器(Database Health Monitor, BHM) 的核心功能展開分析,結合 Prometheus + Grafana + MySQL Export…

PCB設計實踐(二十四)PCB設計時如何避免EMI

PCB設計中避免電磁干擾(EMI)是一項涉及電路架構、布局布線、材料選擇及制造工藝的系統工程。本文從設計原理到工程實踐,系統闡述EMI產生機制及綜合抑制策略,覆蓋高頻信號控制、接地優化、屏蔽技術等核心維度,為高密度、…

嵌入式硬件篇---陀螺儀|PID

文章目錄 前言1. 硬件準備主控芯片陀螺儀模塊電機驅動電源其他2. 硬件連接3. 軟件實現步驟(1) MPU6050初始化與數據讀取(2) 姿態解算(互補濾波或DMP)(3) PID控制器設計(4) 麥克納姆輪協同控制4. 主程序邏輯5. 關鍵優化與調試技巧(1) 傳感器校準(2) PID參數整定先調P再調D最后…

【Linux基礎I/O】文件調用接口、文件描述符、重定向和緩沖區

【Linux基礎I/O一】文件描述符和重定向 1.C語言的文件調用接口2.操作系統的文件調用接口2.1open接口2.2close接口2.3write接口2.4read接口 3.文件描述符fd的本質4.標準輸入、輸出、錯誤5.重定向5.1什么是重定向5.2輸入重定向和輸出重定向5.3系統調用的重定向dup2 6.緩沖區 1.C語…

鴻蒙HarmonyOS 【ArkTS組件】通用屬性-背景設置

📑往期推文全新看點(附帶最新鴻蒙全棧學習筆記) 嵌入式開發適不適合做鴻蒙南向開發?看完這篇你就了解了~ 鴻蒙崗位需求突增!移動端、PC端、IoT到底該怎么選? 分享一場鴻蒙開發面試經驗記錄(三面…