技术标签: 异常测试
1、MQ消息体中某些必填参数为NULL,或者全部必填为NULL,字段类型、长度是否不符合约定
2、MQ消息体中参数位置错误
3、消息重复发送,只消费一条 —幂等性
一般根据消息内容中唯一标识来去重
4、消息到达顺序不一致,导致业务异常
比如业务是有先后顺序的
案例1:订单下单后再取消,如果先收到取消的消息,再收到下单消息,就会有问题
案例2:一条政策新增后马上删除,政策同步时,政策删除的消息先到达,新增的消息后到,就会导致最小价该条政策没删除,只能等全量同步的时候再删除
5、消息发送失败,重试次数
1)Producer端重试
比如网络抖动导致生产者发送消息到MQ失败,可以手动设置发送失败重试的次数
2)Consumer端重试
默认16次,重试时间间隔会越来越长,如果失败的多,容易堆积
重试次数可自定义设置
消费者端失败分2种
A、Exception
如反序列化失败
B、timeout
只有消息推送失败才需要重推,需要注意开发不要把其他失败的情况也进行重试
如收到消息,但解析消息时,序列化失败,这种算消息发送成功的
还比如政策同步时,消费者收到消息,但特殊情况消费异常,也去做了重试
6、机器重启时间段的消息,消费者能否消费到
7、push的类型,需要测试当有生产者生成消息时,消费者是否能及时得到信息并消费
8、Pull类型的消费者,需要测试拉取的时间间隔,间隔一段时间再有消息延迟性
9、消费时消费节点测试
接线上已有的生产者,需要注意,必须设置消费开始时间,不然上线时会大批量消息过来会造成堆积,造成故障
10、消息丢失,业务是否兼容,是否有补偿或者监控机制
比如政策同步消息丢失,还有全量航线同步进行补偿;
供应商退票先发消息给供应商,退订这边会监控,临近跨退规节点,会去调供应商接口检查是否已推送供应商退票,没有退票的会自动再推一遍
11、消费模式注意,消息争用
如果是集群模式,同一topic下新增新的消费组,没有申请新的group,导致一条消息投递过来,多个消费组争抢
案例:有时候开发为了省事,预发和线上同一个topic,消费组的group也一样,上线后,可能有效消息就被预发消费组消费了
知识点:
一、RocketMQ消息模式
1、集群模式
一条消息投递过来,只会被consumer 1、consumer 2、consumer 3中的一个消费
2、广播模式
当 consumer 使用广播消费时,一条消息投递过来,会被 consumer 1、consumer 2、consumer 3都消费一次
目前我们用的比较多的是集群模式,集群模式可以模拟广播消费
如果业务上确实需要使用广播消费,那么我们可以通过创建多个 consumer 实例,每个 consumer 实例属于不同的 consumer group,但是它们都订阅同一个 topic。举个例子,我们创建 3 个 consumer 实例,consumer 1(属于consumer group 1)、consumer 2(属于 consumer group 2)、consumer 3(属于consumer group 3),它们都订阅了 topic A ,那么当 producer 发送一条消息到 topic A 上时,由于 3 个consumer 属于不同的 consumer group,所以 3 个consumer都能收到消息,也就达到了广播消费的效果了。 除此之外,每个 consumer 实例的消费逻辑可以一样也可以不一样,每个consumer group还可以根据需要增加 consumer 实例,比起广播消费来说更加灵活。
二、push 和 pull 的优缺点
push
优点:生产者主动推送给消费者,及时性很高
缺点:当消费者消费能力远低于生产者生产能力,那么一旦生产者推送大量消息到消费者时,就会导致消费者消息堆积,处理缓慢,甚至服务崩溃。(那么如何解决这个问题呢?需要mq提供流控制,也就是依据消费者消费能力做流控。比如rabbitmq设置Qos,限制消费数量。)生产者需要维护和每个消费者之间的会话。
优化方案:不采用 http 长连接的方法保持会话,采用 socket 监听。
适用场景:对于数据实时性要求高的场景
pull
优点:消费者可以依据自己的消费能力进行消费;生产者不需要维护和消费者之间的会话。
缺点:拉取消息的间隔不太好设置。间隔太短,对服务器请求压力过大。间隔时间过长,那么必然会造成一部分数据的延迟。
实时性相对较低。
优化方案:长轮询:消费者如果尝试拉取失败,不是直接 return,而是保持连接 wait,服务端如果有新的消息到来,返回最新消息。
适用场景:对于生产者生产消息数据比较大时,而消费端处理比较复杂,消费能力相对较低
三、刷盘方式
同步刷盘:在消息到达MQ后,RocketMQ需要将数据持久化,同步刷盘是指数据到达内存之后,必须刷到commitlog日志之后才算成功,然后返回producer数据已经发送成功。
异步刷盘:是指数据到达内存之后,返回producer说数据已经发送成功。,然后再写入commitlog日志。
commitlog:
commitlog就是来存储所有的元信息,包含消息体,类似于Mysql、Oracle的redolog,所以主要有CommitLog在,Consume Queue即使数据丢失,仍然可以恢复出来。
consumequeue:记录数据的位置,以便Consume快速通过consumequeue找到commitlog中的数据
文章浏览阅读647次,点赞7次,收藏6次。天锐绿盾加密软件是一款全面保障企业电脑数据和安全使用的加密软件。
文章浏览阅读1.2w次,点赞8次,收藏29次。XML简介:XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。XML标签没有被预定义,需要用户自行定义标签。XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布XML1.0规范。XML被广泛认为是继Ja_dtdparser.jar 作用
文章浏览阅读6.8k次,点赞6次,收藏12次。雨中冒险2(Risk of Rain 2)破解修改,成就解锁教程_雨中冒险2爆率修改
文章浏览阅读593次,点赞26次,收藏9次。构建多领域异构数据融合的统一数据集作者:禅与计算机程序设计艺术1. 背景介绍随着大数据时代的到来,各个领域都产生了大量的异构数据。如何有效地整合和利用这些多源、多类型的数据资源,已经成为当前亟需解决的关键问题。构建一个统一的数据集,不仅能够提高数据的利用效率,还能为跨_异构数据融合概念
文章浏览阅读31次。关键字: 数据绑定 在使用Flex开发的过程中,数据绑定是一定会遇到的,这种技术简单,又有点好玩,重要的是它让开发变得简单了。在Flex中,数据绑定的方式有这么三种:直接在“{}”中填写绑定变量 使用<mx:Binding />标签绑定 使用ActionScript中的BindingUtils类绑定 示例1:<mx:...
文章浏览阅读3.2k次。http://www.cnblogs.com/eyeszjwang/articles/2418354.html#include "stdafx.h"#include <cv.h>#include <highgui.h>#include <math.h>#include <stdlib.h>#include <stdio.h..._c++ opencv imread读写图片demo
文章浏览阅读563次。2021级-JAVA03 基础语法2--控制语句_湖北经济学院李祥圆的周长跟面积
文章浏览阅读4.9k次。Unity画线(Vectrosity5.6.1插件)_unity vectrosity 插件下载
文章浏览阅读6.4k次。首席信息官(又称CIO,chief information officer的缩写),中文意思大概是“首席信息官”或者“信息主管”,是负责公司信息即使是和系统所有领域的高级官员。产生背景现代企业正常运营,要靠物流,资金和信息流的畅通为基础,与企业信息化进程和企业流程再造密切相关。中国企业纷纷开始设立首席信息官这个职位。在人们的印象中,中国的IT应用市场一贯是金融与电信两大行业唱主角。据统计,2001年中国银行信息化建设投资的总体规模为260亿元,同年电信业行业信息化的整体市场规模为427.8亿元。另一个_cio大还是cto大
文章浏览阅读6.3k次,点赞2次,收藏8次。本篇主要用来说明基于minio文件存储的断点续传及断点下载的解决方案1.断点续传断点续传功能采用Tus+Minio结构,其中Minio作为文件存储服务器,提供文件存储功能。Tus是开源的断点续传的框架,用于连接Minio并提供统一的接口供客户端连接。服务端由go编写,客户端提供多种语言,如js、java、androidtus及minio, docker-compose.yml文件:version: '3.3'services: minio-server: image: min_tus断点续传window版本
文章浏览阅读3.7k次。最近在使用mybatis做数据库管理的时候出现了一个问题,因为只是一个控制台项目,所以没有整合spring,只是用了mybatis默认的一些数据库配置信息。然后再与前端做交互的时候前端并发访问总是会出现这几个错误:Cannot commit, transaction is already closed### Cause: org.apache.ibatis.executor.Execu_cannot commit, transaction is already closed
文章浏览阅读171次。Tempter of the BoneTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 114735 Accepted Submission(s): 31170Problem DescriptionThe_http ://blog .csdn. net/huangwen纬i1010