Skip to content

消息队列测试

说明

消息队列测试关注消息投递可靠性、消费确认、重复消费和异常补偿场景。

面试怎么问

你怎么验证消息是否成功投递和消费?

验证分三个层面:

投递层检查消息是否进入队列(检查队列消息数或消息 ID)。

消费层检查消费者是否收到并处理消息。

业务层检查消息消费后的副作用(数据库更新、业务状态变更)。

对于关键消息,要验证消费确认机制,确保消息不会丢失。

消息重复消费怎么测?

模拟重复投递场景:消费者重复收到同一消息、网络抖动导致 ACK 丢失、消费者重启后重新消费。

验证点:消费逻辑是否幂等、是否会重复写入数据、业务状态是否一致。

测试方法:手动发送重复消息、延迟 ACK、模拟网络问题。

消息积压和消费失败场景怎么处理?

消息积压时验证:积压告警是否触发、消费者是否能自动扩容、积压消息的优先级处理。消费失败时验证:是否有重试机制、重试次数和间隔是否合理、死信队列处理、人工补偿入口。还要验证监控和告警是否覆盖这些异常场景。

项目里怎么用

  • 验证生产者投递成功和消费者确认机制,确保消息不丢失。
  • 覆盖消息重复、顺序、延迟和丢失场景,验证系统的健壮性。
  • 结合业务状态验证消息消费后的副作用,确保业务一致性。
  • 测试死信队列和补偿机制,验证异常情况的处理。
  • 监控消息积压情况,建立告警机制。

容易答错什么

只关注投递,忽略消费确认和幂等

消息投递只是第一步,关键是消费确认和幂等处理。

消费确认确保消息不丢失,幂等处理确保重复消费不产生副作用。

测试要覆盖:ACK 超时重投递、消费者崩溃后重新消费、网络问题导致的重复。

这些场景在生产环境经常发生。

不会讲消息积压和消费异常的补偿机制

消息积压和消费异常是线上常见问题。补偿机制包括:死信队列存储失败消息、定时重试、人工处理入口、监控告警。要说明如何测试这些机制的有效性,以及如何设计测试用例覆盖各种异常场景。

忽略跨服务消息链路的验证

消息队列连接多个服务,要验证完整链路:生产者是否正确发送、消息内容是否正确、消费者是否正确处理、下游服务是否正确接收。可以使用链路追踪查看消息流转,验证每个环节的正确性。跨服务验证是 MQ 测试的核心难点。