常見的中間件--消息隊列中間件測試點

最近刷題,看到了有問中間件的題目,于是整理了一些中間件的知識,大多是在小破站上的筆記,僅供大家參考~

主要分為七個部分來分享:

一、常見的中間件

二、什么是隊列?

三、常見消息隊列MQ的比較

四、隊列的優點和缺點

五、消息隊列的原理

六、為什么使用消息隊列?

七、隊列的測試點

八、高頻軟件測試面試題

一、常見的中間件

Redis:緩存中間價

MQ:消息隊列中間件

Nginx:Web服務器中間件

二、什么是隊列?

隊列(Queue)是一種常見的數據結構,用于按照先進先出(FIFO,First In First Out)的原則管理元素。這意味著最先被添加到隊列的元素將首先被移除。隊列的操作通常包括兩個主要動作:入隊(Enqueue)和出隊(Dequeue) 。

三、常見消息隊列MQ的比較

ActiveMQ:比較老,一般不用了

RabbitMQ:大部分公司夠用了,除非像阿里并發那么大的公司

RocketMQ:阿里在用的

Kafka:主要用于記錄日志,例如淘寶的足跡功能

四、隊列的優點和缺點

1、優點

解耦

異步

流量削峰填谷

2、缺點

用性低

復雜度

一致性問題(例如消息丟失,消息重復等等,導致兩個系統數據不一致)

五、消息隊列的原理

下面以用戶下單這個場景為例,分享下整個過程:

一)生產者如何將消息可靠投遞到消息隊列(MQ):

  1. 客戶端發送消息到消息隊列MQ。
  2. 消息隊列MQ將消息進行持久化,并向客戶端發送 Ack 消息。由于網絡問題可能導致 Ack 消息無法及時發送至客戶端,因此客戶端在等待一段超時時間后,會重新傳送消息。
  3. 客戶端在收到 Ack 消息后,確認消息已被成功投遞。

二) 消息隊列如何將消息可靠投遞給消費者:

  1. 消息隊列MQ將消息推送給客戶端(或者客戶端通過拉取方式獲取消息)。
  2. 客戶端接收并完成業務邏輯處理。
  3. 客戶端向消息隊列MQ發送 Ack 消息,通知消息隊列刪除該消息。由于網絡問題可能導致 Ack 失敗,客戶端會收到重復的消息,從而引發了消費冪等性的問題。
  4. 消息隊列刪除已被成功消費的消息。

六、為什么使用消息隊列?

主要用于解耦、異步、流量削峰填谷。

1、解耦

如果不加中間件MQ,訂單系統直接調用庫存系統,當庫存系統出現故障時,用戶就會下單失敗。加了中間件之后,就不會出現下單失敗了,用戶下單之后,把訂單id傳給MQ,監控系統發現庫存系統掛了之后,立馬修復,最后還是可以下單成功。

2、異步

如果不加中間件MQ,下單的時候,訂單系統會同步調用庫存系統,有了MQ之后,下單后,訂單系統只要把訂單id傳給MQ即可。

3、流量削峰填谷

例如B是訂單系統,C是庫存系統,C系統每分鐘只能承受1W的并發,現在突然有30W的并發,那先把訂單消息發送給MQ,C系統從MQ拉取信息,處理速度還是每分鐘1W,最后花費30分鐘來處理,用時間換空間。

七、隊列的測試點

一)正向的業務邏輯測試

1、數據正確性

產者推送消息,消費者能正常消費信息,比如消息發送的字段以及接收的字段有無缺失,且保持一致

2、時序

不同時序推送消息,先后順序是否與預期一致。

注意隊列優先級,可使用事務解決

二)反向的異常測試

1、消息推送失敗是否有重試

如因為網絡原因導致的消息丟失,是否有補發和重試機制(用定時任務跑),通常情況下Produce會設置補發。

2、避免重復消息

例如生產者重復推送同一條數據,由于RocketMQ天生就有消息重復發送的機制,所以當產生消息重新發送時,如何對此問題進行處理?通常情況下要對消費端的服務做冪等處理,數據庫里添加唯一索引,保證消息不被重復消費。

三)性能測試(消費積壓)

主要就是通過性能測試,看看在高并發訪問的情況下,系統正確處理消息的能力,是否會出現消息隊列擁堵,宕機等情況。

解決消費積壓的辦法:

  1. 首先要快速解決消息積壓問題,比如加大consumer消費數量,消費頻次;
  2. 臨時緊急擴容,比如臨時征用10倍的機器來部署consumer程序,這個程序部署上去消費積壓的數據,等快速消費完積壓數據之后,得恢復原先部署架構,重新用原先的consumer機器來消費消息。

八、高頻軟件測試面試題

1、如何保證消息不丟失?

消息隊列將收到的消息持久化到磁盤中,以保證消息隊列異常或重啟的情況下,消息不會丟失

2、消息隊列的工作原理是什么?

生產者創建消息并將其發送到消息隊列, 消費者從消息隊列中接收消息,并異步地處理這些消息, 消費者在成功處理消息后向消息隊列發送確認(Acknowledge)消息,通知隊列可以刪除已處理的消息。

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

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

相關文章

用戶管理 --匯總

一、第一節課 1.1 本人寫的 前端: 魚皮 --> 用戶中心 第1節課-CSDN博客 中期: 一、用戶管理 第1節課中間-CSDN博客 后端: 一、用戶管理-CSDN博客 其他的鏈接 億圖腦圖MindMaster 1.2 優秀球友,推薦 Docs 另…

12_企業架構之Tomcat部署使用

Tomcat 學習目標和內容 1、能夠描述Tomcat的使用場景 2、能夠簡單描述Tomcat的工作原理 3、能夠實現部署安裝Tomcat 4、能夠實現配置Tomcat的service服務和自啟動 5、能夠實現Tomcat的Host的配置 6、能夠實現Nginx反向代理Tomcat 7、能夠實現Nginx負載均衡到Tomcat 一、Tomcat介…

Abaqus許可證配置文件問題

在使用Abaqus工程設計和仿真軟件時,您可能會遇到許可證配置文件問題。這些問題可能會影響軟件的正常運行和工作效率。為了幫助您解決這些問題,我們特別撰寫了這篇文章,以提供全面、有效的解決方案。 一、Abaqus許可證配置文件問題及原因 許…

力扣labuladong一刷day32天二叉樹

力扣labuladong一刷day32天二叉樹 一、297. 二叉樹的序列化與反序列化 題目鏈接:https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ 思路:關于序列化與反序列化,題目不要求序列化的方式,只要求樹經過序列化…

linux的定時任務Corntab

安裝crontab # yum安裝crontab yum install -y crontab# 開機自啟crond服務并現在啟動 systemctl enable --now crondcron系統任務調度 系統任務調度: 系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。 在/etc/crontab文件,這…

機器學習之全面了解回歸學習器

我們將和大家一起探討機器學習與數據科學的主題。 本文主要討論大家針對回歸學習器提出的問題。我將概要介紹,然后探討以下五個問題: 1. 能否將回歸學習器用于時序數據? 2. 該如何縮短訓練時間? 3. 該如何解釋不同模型的結果和…

No suitable driver found for jdbc:mysql://localhost:3306(2023/12/7更新)

有兩種情況: 壓根沒安裝下載了但沒設為庫或方法不對 大多數為第一種情況: 一. 下載jdbc 打開網址選擇一個版本進行下載 https://nowjava.com/jar/version/mysql/mysql-connector-java.html 二.安裝jdbc 在項目里建一個lib文件夾 在把之前下載的jar文…

優化 SQL 日志記錄的方法

為什么 SQL 日志記錄是必不可少的 SQL 日志記錄在數據庫安全和審計中起著至關重要的作用,它涉及跟蹤在數據庫上執行的所有 SQL 語句,從而實現審計、故障排除和取證分析。SQL 日志記錄可以提供有關數據庫如何訪問和使用的寶貴見解,使其成為確…

JNPF低代碼平臺詳解 -- 系統架構

目錄 一、技術介紹 技術架構 二、設計原理 三、界面展示 1.代碼生成器 2.工作流程 3.門戶設計 4.大屏設計 5.報表設計 6.第三方登錄 7.多租戶實現 8.分布式調度 9.消息中心 四、功能框架 JNPF低代碼是一款新奇、實用、高效的企業級軟件開發工具,支持企…

Qt/C++音視頻開發58-逐幀播放/上一幀下一幀/切換播放進度/實時解碼

一、前言 逐幀播放是近期增加的功能,之前也一直思考過這個功能該如何實現,對于mdk/qtav等內核組件,可以直接用該組件提供的接口實現即可,而對于ffmpeg,需要自己處理,如果有緩存的數據的話,可以…

Rust的eBFP框架Aya(一) - Linux內核網絡基礎

前言 在我的Rust入門及實戰系列文章中已經說明, Rust是一門內存安全的高性能編程語言,從它的這些優秀特性來看,就是一門專為系統開發而誕生的語言。至于很多使用Rust來進行web開發的行為,不能說它們不好,只能說是殺雞…

2017下半年軟工(橋接模式)

題目——橋接模式(抽象調用實現部分) package org.example.橋接模式;/*** 橋接模式的核心思想是將抽象部分與它的實現部分分離,使它們可以獨立變化,就是說你在實現部分:WinImp、LinuxImp基礎上還能加上RedHatImp&#…

03-微服務架構構建之微服務拆分

文章目錄 前言一、微服務拆分的原則二、微服務拆分的時機三、微服務拆分的方法總結 前言 微服務架構是將一個單體應用程序拆分為一個個獨立且保持松耦合的服務的一種架構方式,每個服務有著獨立的數據庫并且能獨立運行部署。微服務架構的構建過程中,第一…

偷竊別人的密碼

在工作中都用到virtual machine吧,同事之間還互相借用機器,或者不借用但憑借自己的域賬號能登錄任意機器,而且每個域賬號都有sudo權限? 那你要小心了! 因為我可以輕易記錄下每個ssh登錄到我機器,或者我在…

uniapp 輸入框輸入時,會將內容頂上去的解決方案

// 設置頁面最小高度 export const setPageMinHeight () > {return {position: relative,min-height: uni.getSystemInfoSync().windowHeight px} }頁面使用: import {setPageMinHeight} from "/utils/uniUtil";data() {return {minHeight: setPag…

Unity 狀態系統

狀態系統 原理食用方法Demo 原理 #mermaid-svg-lUbxJ8eMP3KqrEhY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lUbxJ8eMP3KqrEhY .error-icon{fill:#552222;}#mermaid-svg-lUbxJ8eMP3KqrEhY .error-text{fill:#55…

官方officevisio在線安裝包

在線安裝包,在線就是要有網絡環境,你能搜到這篇博客,就初步具備網絡環境 visio在線安裝包.zip官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤 在線安裝包如下,雙擊執行安裝即可,可供選擇的64/32位 軟件的激活與…

netty使用

支持協議 TCP/UDPHTTP/HTTPSWebSocketSPDY/HTTP2MQTT/CoAP 服務端 常用類 ServerBootstrap 服務端配置類 //設置線程組、parentGroup處理連接、childGroup處理I/O group(EventLoopGroup parentGroup, EventLoopGroup childGroup) //Channel通過何種方式獲取新的連接(NioSe…

【擴散模型】ControlNet從原理到實戰

ControlNet從原理到實戰 ControlNet原理ControlNet應用于大型預訓練擴散模型ControlNet訓練過程ControlNet示例1 ControlNet與Canny Edge2. ControlNet與Depth3. ControlNet與M-LSD Lines4. ControlNet與HED Boundary ControlNet實戰Canny Edge實戰Open Pose 小結參考資料 Cont…

Linux系統上RabbitMQ安裝教程

一、安裝前環境準備 Linux:CentOS 7.9 RabbitMQ Erlang 1、系統內須有C等基本工具 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz socat2、下載安裝包 1)首先&a…