mq监听 java springboot mq监听测试_数据


1.什么是MQ
MQ简单介绍 消息总线(Message Queue),后文称MQ,是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。
MQ的不足是:
1)系统更复杂,多了一个MQ组件
2)消息传递路径更长,延时会增加
3)消息可靠性和重复性互为矛盾,消息不丢不重难以同时保证
4)上游无法知道下游的执行结果,这一点是很致命的
====================MQ基础知识=============
Producer(生产者)
所谓的生产者,就是产生消息的应用方,在进行生产者端的测试时,需要注意如何接入对应的MQ,需要哪些信息,可以提前确认(包括但不仅限入接入账号、接入的主题、消息格式等)。
测试注意点有:
l 数据是否真正推送到队列中
l 数据是否推送到正确的topic下
l 如果一次推送的数据过多,前面推送的数据如何处理(超过队列)
l 同时需要注意每个topic下的queue如何分布数据
Consumer(消费者) 在MQ的世界里,消费者(从MQ队列里获取数据的应用方)主要有两种,PUSH和PULL,简单来说,就是主动拉取消息和被动接收消息(还有一种消费方式是广播消息,应用场景较少)。不管哪种获取消息方式,首先都要订阅消息,即先指定需要消费哪个topic下的消息。
测试注意点:
l 确认应用的消费试是哪种
l 测试消费者的消费信息源是否正确(能否从正确的topic中拿到正确的消息)
l 测试Topic的消费队列策略是什么
l 数据被消费者使用后,有没有及时的被清除
l 当消息队列过长(消费速度过慢)时,MQ会溢出的数据如何处理
l 是否会越权消费别的 topic中的信息
l 如果是PULL类型的消费者,需要测试拉取的时间间隔,如果是push的类型,需要测试当有生产者生成消息时,消费者是否能及时得到信息并消费
=========使用MQ业务的测试方案=================
生产者端的测试
l 编写java代码,使用ActiveMQConnectionFactory 进行建立连接并初始化,然后推送相关的数据到队列中(推荐)
l 在MQ的web页面中进行模拟一个请求推送
消费者端测试
l 编写java代码,使用ActiveMQConnectionFactory 进行建立连接并初始化,然后做为消费者消费数据(推荐)
其它相关的测试方案: 持久化测试
这个地方需要分清楚是采用哪种MQ,不同MQ对消息的持久化方式不一样,需要针对性的了解下就可以了。有的是把数据放在内存中,定期持久化,有的是直接持久化到磁盘上。这块内容的测试主要是指当MQ发生异常时(挂起、断电等),对数据的保护。

可靠性测试
可靠性测试主要是针对异常情况下的数据处理,同时还需要注意ConsumerGroup的管理方式,是通过订阅来消费,还是通过广播来消费,需要事先规划清楚。
关注点:
l Broker 正常关闭
l Broker 异常Crash l OS Crash
l 机器掉电,但是能立即恢复供电情况。
l 机器无法开机(可能是 cpu、主板、内存等关键设备损坏)
l 磁盘设备损坏。
l 订阅的消息是否被一个消费者消费后,就清理数据
l 广播的消息被一个消费者消费后,并不能被清理