RabbitMQ如何测试

结合上一篇的遇到bug如何查日志

我们来学习下,如何使用RabbitMQ管理台来测试MQ;

还是之前的例子,用图片简单介绍下逻辑

01 为什么我们要测MQ?什么时候测?

当认证成功之后,没有更新账号的认证状态,涉及到MQ的地方都有可能产生bug:

  • 认证系统没有发MQ;
  • 认证系统发送的MQ数据错误或字段缺失;
  • 账号系统没有消费MQ;
  • 账号系统消费了MQ,但是更新认证状态失败;

除了查询服务器日志之外,MQ后台也可以帮助我们定位MQ问题;

02  RabbitMQ工作原理

在讲解如何查询之前,得先了解下MQ的工作原理:

其中,中间的Broker表示RabbitMQ服务,每个Broker里面至少有一个Virtual host虚拟主机,每个虚拟主机中有自己的Exchange交换机、Queue队列以及Exchange交换机与Queue队列之间的绑定关系Binding。producer(生产者)和consumer(消费者)通过与Broker建立Connection来保持连接,然后在Connection的基础上建立若干Channel信道,用来发送与接收消息。

上面是官方解释,我用小白语言翻译一遍,就是如下图:

03  RabbitMQ管理后台

讲完原理,再看下后台长什么样子:

  • 交换机列表:

  • 交换机详情:

选择一个交换机,可以查看到有哪些路由,哪些队列绑定了哪些路由;

可以新增队列、手动触发发送mq消息;

  • 队列列表:

可以看到队列的堆积情况,及消息处理速度;(如果有堆积,且一直在新增,说明并没有被消费)

可以新增自己的队列,绑定交换机及路由;

  • 队列详情:

04  分析问题

现在要开始分析了:

1、认证MQ发了没?认证系统发送的MQ数据错误或字段缺失;

由于MQ被消费了之后,队列就清空了,如果发送和消费都没问题的话,那账号队列是空的,无法查询到;

这个时候,我们可以新增一个自己的队列,去绑定认证的交换机路由;由于自己新增的队列没有程序去消费,会一直积压,就可以通过自己新增队列查询消息;

如果能查询到消息,说明认证是发送了的;

通过get message而且还可以看到消息内容是否正确,有无字段缺失等;

如果没有发送,那么在常规的测试场景下,就无法测试账号的消费是否有bug,我们可以在交换机详情页,手动推送MQ,去看账号是否变更认证状态;(但是这个时候不好把握MQ的消息格式,得去问开发)

2、账号消费了MQ吗?

这个时候只需要去看账号的队列是否有积压就可以了;

3、账号系统消费了MQ,但是更新认证状态失败;

到这一步在MQ阶段就收尾了,就去查询其他问题了,有没有报错之类的(上篇已讲过);

好了,到此MQ的介绍就已完结;其实关于RabbitMQ管理后台的讲解只是冰山一角,这里只列出了与本文排查有关的,大家可以再多去了解一下~ 欢迎大家一起探讨~

为了测试 RabbitMQ 队列的功能和性能,可以使用多种方法和工具来实现。以下是一些常见的做法: ### 功能测试 功能测试主要关注的是队列是否能够正确地发送、接收以及处理消息。 1. **手动测试**:可以通过编写简单的生产者和消费者程序来验证基本的消息传递功能。例如,使用 Python 的 `pika` 库可以轻松地创建一个消费者脚本来监听特定队列,并打印出接收到的消息[^3]。 ```python import pika # 连接到RabbitMQ服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.10.101')) channel = connection.channel() # 声明队列,确保RabbitMQ中有一个名为'test_queue'的队列 channel.queue_declare(queue='test_queue', durable=True) # 定义回调函数来处理消息 def callback(ch, method, properties, body): print(f"Received {body.decode()}") # 消费队列中的消息,回调函数为callback channel.basic_consume(queue='test_queue', on_message_callback=callback, auto_ack=True) print("Waiting for messages. To exit press CTRL+C") # 开始监听消息 channel.start_consuming() ``` 2. **自动化测试**:利用单元测试框架(如 JUnit 对于 Java 应用)编写测试用例来验证消息的发送与接收逻辑是否正常工作。 ### 性能测试 性能测试则侧重于评估队列在高负载下的表现,包括吞吐量、延迟等指标。 1. **使用内置工具**:RabbitMQ 自带了一些管理插件和监控工具,可以帮助你了解当前系统的运行状态,比如消息堆积情况、连接数等。 2. **第三方工具**:RabbitMQ PerfTest 是一个专门为 RabbitMQ 设计的性能测试开源项目[^1]。它允许用户模拟不同的负载条件来测试 RabbitMQ 集群的表现,并且提供了丰富的配置选项以适应不同场景的需求。 3. **自定义压力测试**:根据实际业务需求定制化开发压力测试脚本或程序,通过大量并发发送和消费消息来模拟真实环境下的流量高峰。这通常涉及到调整诸如预取数量、自动重连时间间隔等参数[^5],以便观察系统在这些条件下的响应能力和稳定性。 4. **基准测试**:确定一组标准的工作负载作为基准,定期执行这些测试来比较不同版本或者配置更改前后系统的性能差异。 进行以上任何形式的测试时,请确保已经充分理解了被测系统的架构特点及其限制因素,这样才能更准确地设计测试案例并解释结果。此外,在实施大规模的压力测试之前,建议先从小规模开始逐步增加强度,以免对生产环境造成不必要的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值