常见的中间件--消息队列中间件测试点

最近刷题,看到了有问中间件的题目,于是整理了一些中间件的知识,大多是在小破站上的笔记,仅供大家参考~

主要分为七个部分来分享:

一、常见的中间件

二、什么是队列?

三、常见消息队列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.mzph.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…