当前位置: 首页 > news >正文

RocketMQ如何测试

RocketMQ如何测试

      • MQ简介
      • RocketMQ
      • RocketMQ测试点

MQ简介

MQ:Message Queue,即消息队列,是一种应用程序之间的消息通信,简单理解就是A服务不断的往队列里发布信息,另一服务B从队列中读取消息并执行处理,消息发布者不需要关心是谁消费了消息,消息消费者不需要关心发布消息的是谁,互不干扰。

消息队列主要作用和优势:

  • 异步和解耦
    以电商订单处理为例,用户提交一个订单,如果订单系统以同步方式调用 支付、库存等服务。服务之间就会有很高耦合性,容错性会降低。一旦支付或库存服务宕机,那么就会导致订单提交失败,整个交易的异常。从而影响用户的体验。
    如果中间加入了消息中间件,不管是支付还是库存等服务,通过异步的方式进行调用的,如果其中一个服务宕机了,提交订单仍收到正常响应,不会影响用户下单的使用,同时不用等待其它服务的结果,提高了处理效率。然后等服务恢复后可以从消息队列获取消息,继续进行订单的后续处理。

  • 流量削峰
    流量削峰也叫削峰填谷,例如一些电商秒杀或购物节活动,都会使用到消息中间件。
    如果在不使用消息中间件,活动期间每秒是很高的并发,如果A服务需要要将数据写入到MySQL中,由于MySQL本身服务的上限,会有大量的请求堆积在A服务去处理,结果会导致A服务的的崩溃。
    这时将用户的请求写入存储到MQ中,因为消息中间件本身是对数据量处理比较高的一个系统,所以对于高并发的请求,消息中间件仍可以处理,然后A服务作为消息中间件的一个消费者,以固定的速度从MQ中拉取消息,处理并完成相关业务操作,进而确保我们A服务的稳定性。

  • 数据分发

  • 可扩展性等

常见的MQ主要有:RocketMQ、ActiveMQ、RabbitMQ、Kafka,各有优势。其中RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件。历经过很多高并发数据处理的磨练,无数业务场景的应用,足以证明它的优秀。

RocketMQ

简单来说,RocketMQ就是一个分布式发布-订阅消息中间件,底层基于队列模型来实现消息收发功能。
在这里插入图片描述

RocketMQ结构包含4个模块:Nameserver,Broker,Producer,Consumer。

Nameserver 名称服务:名称服务是一个Topic路由注册中心,充当路由消息的提供者。生产者或消费者能够通过名字服务查找各Topic相应的Broker IP列表,存储当前集群所有Brokers信息、Topic跟Broker的对应关系。

Broker 代理服务器:集群最核心模块,主要负责Topic消息存储、消费者的消费位点管理(消费进度)。Consumer 从这里取得消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,Message Queue 用于存储消息的物理地址。消息相关的元数据,包括用户组、消费进度偏移量、队列信息等

Producer 消息生产者:由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。每个生产者都有一个ID(编号),多个生产者实例可以共用同一个ID。同一个ID下所有实例组成一个生产者集群。

Consumer 消息消费者:负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序,执行完成后会发送一个消息给Broker进行确认,这个就是ACK确认。提供了两种消费形式:PullConsumer(拉取式消费)、PushConsumer(推动式消费)。每个订阅者也有一个ID(编号),多个消费者实例可以共用同一个ID。同一个ID下所有实例组成一个消费者集群。

RocketMQ测试点

1、消息正向验证。验证消费主流程是正常的,消息发送和消费都正常情况下,消息生成和消费及流程处理无误。可通过RocketMQ控制台查找对应的Topic,找到对应的Message ID的数据,核对数据内容
在这里插入图片描述

2、逆向用例与异常值处理
对于Produce和Consumer两端的异常消息处理,如消息某个参数为空,为异常的情况,在Produce发送错误信息后,消费端是否能够有效处理错误问题。需要对日志和数据库等方面进行查看。

3、消息丢失时的处理情况,(模拟网络等问题)
如因为网络原因导致的消息丢失,是否有补发,通常情况下Produce会设置补发。如果是落库到OS存储、硬盘存储过程中的问题,如何保证消费正常?

4、消息避免重复发送
由于RocketMQ天生就有消息重复发送的机制,所以当产生消息重新发送时,如何对此问题进行处理?通常情况下要对消费端的服务做幂等处理,保证消息不被重复消费。

5、性能相关问题,消费积压
主要是性能测试,可以通过RocketMQ的控制台,查看对应消息消费的TPS,来保证消费的及时性,看是否有消息产生阻塞消费,导致消费TPS波动或骤降等问题。

6、消费的先后顺序以及消费阻塞问题
与定时消息同原理,生产者生产消息时指定特定的 MessageQueue ,消费者消费消息时,消费特定的 MessageQueue,当然如果只有单个MessageQueue,则不会有消费顺序的问题。
同一个 MessageQueue 保证里面的消息是顺序消费的前提是:消费者是串行的消费该 MessageQueue,因为就算 MessageQueue 是顺序的,但是当并行消费时,还是会有顺序问题
但是串行消费也同时引入了两个问题:引入锁来实现串行、前一个消费阻塞时后面都会被阻塞

相关文章:

RocketMQ如何测试

RocketMQ如何测试MQ简介RocketMQRocketMQ测试点MQ简介 MQ:Message Queue,即消息队列,是一种应用程序之间的消息通信,简单理解就是A服务不断的往队列里发布信息,另一服务B从队列中读取消息并执行处理,消息发…...

SpringBoot中的bean注入方式和原理介绍

Spring Boot是一个非常流行的Java框架,它可以帮助开发者快速地构建高效、健壮的应用程序。其中一个重要的功能就是依赖注入,也就是将一个对象注入到另一个对象中,以便它们可以相互协作。在Spring Boot中,依赖注入是通过bean实现的…...

ESP32设备驱动-RFID-RC522模块驱动

RFID-RC522模块驱动 文章目录 RFID-RC522模块驱动1、RFID-RC522介绍2、硬件准备3、软件准备4、驱动实现1、RFID-RC522介绍 基于 NXP 的 MFRC522 IC 的 RC522 RFID 模块通常带有一个 RFID 卡标签和具有 1KB 内存的密钥卡标签。 最重要的是,它可以写一个标签,这样你就可以在里…...

SMETA认证有些客户是需要做窗口期的

【SMETA认证有些客户是需要做窗口期的】SMETA审核是常见的社会责任审核标准之一,中文全称为“Sedex 会员道德贸易审核”,英文为“Sedex Members Ethical Trade Audit”. SEDEX 官网:网页链接Sedex 作为目前市场流行的CSR审核标准,…...

面向对象设计模式:创建型模式之原型模式

文章目录一、引入二、代理模式,Prototype Pattern2.1 Intent 意图2.2 Applicability 适用性2.3 类图2.4 应用实例:使用下划线或消息框展示字符串2.4 应用实例:JDK java.lang.Object java.lang.Cloneable一、引入 二、代理模式,Pr…...

三维重建(单目、双目、多目、点云、SFM、SLAM)

1 相机几何与标定1.1 相机模型中的坐标系1.2 四种坐标系之间的转换1.3 相机内参1.4 相机标定2 单目三维重建2.1 NeuralRecon三维重建定义 在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识. 而…...

Java中的final和权限修饰符

目录 final 常量 细节: 权限修饰符 Java权限修饰符用于控制类、方法、变量的访问范围。Java中有四种权限修饰符: 权限修饰符的使用场景: final 方法 表明该方法是最终方法,不能被重写。类 表明该类是最终类,不能被继…...

MySQL的基本语句(SELECT型)

基本MySQL语句SELECTSELECT FROM 列的别名去除重复行空值着重号算术运算符加法( )减法( - )乘法( * )除法&#xff08; / 或DIV)求模&#xff08; % 或MOD)比较运算符等于&#xff08; &#xff09;安全等于&#xff08; <> &#xff09;不等于&#xff08; ! 或 <…...

日志服务搭建-ES-FileBeat-Kibana

1次订单量突增问题&#xff0c;导致了有几个数据没有录库&#xff0c;但是确有支付的记录&#xff0c;啥玩意&#xff0c;还能有这个操作&#xff0c;组内安排问题定位&#xff0c;解决&#xff0c;一看打出来的日志&#xff0c;只有支付有&#xff0c;生成订单这边没有&#x…...

大数据架构设计与数据计算流程

大数据架构设计Hadoop有3个核心组件&#xff1a;分布式文件系统HDFS&#xff1b;分布式运算编程框架MapReduce&#xff1b;分布式资源调度平台YARN。HBase&#xff0c;Hadoop dataBase&#xff0c;基于HDFS的NoSQL数据库&#xff0c;面向列式的内存存储&#xff0c;定期将内存数…...

207. 课程表

207. 课程表https://leetcode.cn/problems/course-schedule/ 难度中等1526 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [a…...

2023-03-08 mysql列存储数据库-查询执行过程分析

摘要: 在mysql的sql层和存储引擎的交互模式中, 存储引擎实现handler接口, 由SQL层负责调用接口, 所以执行的过程可以看作是在sql层中, innodb仅提供接口。 但是在mysql列存储引擎中, TMD直接替换掉了sql层的执行接口,并且将sql层的查询树转换成了自己的一套查询树, 然后根据…...

各种激活函数的计算公式、图像以及实现代码

激活函数已经成为神经网络中非常重要的一部分&#xff0c;随着各种类型的神经网络模型被人们开发出来&#xff0c;各种激活函数也应运而生&#xff0c;在不同的场景中&#xff0c;取得良好的效果。本文跟据著名的YOLO系列目标检测模型的源码 AlexeyAB Darknet&#xff0c;整理出…...

ArangoDB

介绍 ArangoDB 是一个原生的多模型开源数据库&#xff0c;具有灵活的文档、图形和键值数据模型。使用方便的类似 SQL 的查询语言或 JavaScript 扩展构建高性能应用程序。主要特点 在集群上安装 ArangoDB —— 安装简单灵活的数据建模&#xff1a;数据建模为键值对、文档或图表的…...

MySQL8.0Linux安装及主从的搭建

MySQL8.0Linux安装教程 下载并安装 需要说明的一点是我使用的是SSH secure shell Client连接linux系统的&#xff0c;它的用法和命令窗口差不多。界面如图&#xff1a;一样的使用Linux命令操作。 话不多说 第一步&#xff1a; 1&#xff09;、切换到 /usr/local下 cd /usr/…...

苹果新专利实现无线技术传输睡眠数据,蓝牙在智能家居中的应用

苹果于 2017 年 5 月收购了芬兰科技公司 Beddit&#xff0c;只是在过去 6 年时间里并没有太大的动作。根据美国商标和专利局本周公示的清单&#xff0c;苹果获得了一项 Beddit 相关的技术专利。 根据专利描述&#xff0c;苹果使用一根或者多根天线&#xff0c;利用电磁辐射的…...

银行数字化转型导师坚鹏:数字化转型为什么需要致良知与知行合一

在银行数字化转型过程中&#xff0c;特别需要致良知与知行合一哲学思想的指导。 知中有行&#xff0c;行中有知&#xff1b;行极而知&#xff0c;知极而行&#xff1b;知行无端&#xff0c;知行无始。知与行是一件事&#xff0c;做事与培养本体&#xff08;修心&#xff09;也是…...

Web前端学习:章三 -- JavaScript预热(二)

六五&#xff1a;作用域与function function&#xff1a;函数&#xff0c;不是数学上的函数&#xff0c;与写代码有关 JS中的函数&#xff1a;运用它&#xff0c;起个名字&#xff0c;然后对函数进行调用&#xff0c;即可将函数中的内容执行一遍 1、function 最基本的作用域…...

Excel绘制数据对比表格-表格可视化

Word中生成的表格一般比较单调&#xff0c;若一组数据存在对比的情况时&#xff0c;读者/审稿人难以直接通过详细对比数据来分析&#xff0c;此时若可以将该组数据可视化来对比则为好&#xff0c;Excel则可实现该功能。 关于有些期刊需要提供表格中的数据便于复制等情况时&…...

究竟是谁负了谁,来自底层测试的2022年终总结

前言 说实话坐在椅子前&#xff0c;都想好了&#xff0c;该怎么去写&#xff0c;甚至感觉有好多要写的&#xff0c;但是当我坐在椅子上时&#xff0c;却不知道该怎么开头了&#xff0c;不知道是不是紧张&#xff1f;还是不舍&#xff1f;难道还没有跟过去挥手告别的勇气吗&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...