消息队列测试
说明
消息队列测试关注消息投递可靠性、消费确认、重复消费和异常补偿场景。
面试怎么问
你怎么验证消息是否成功投递和消费?
验证分三个层面:
投递层检查消息是否进入队列(检查队列消息数或消息 ID)。
消费层检查消费者是否收到并处理消息。
业务层检查消息消费后的副作用(数据库更新、业务状态变更)。
对于关键消息,要验证消费确认机制,确保消息不会丢失。
消息重复消费怎么测?
模拟重复投递场景:消费者重复收到同一消息、网络抖动导致 ACK 丢失、消费者重启后重新消费。
验证点:消费逻辑是否幂等、是否会重复写入数据、业务状态是否一致。
测试方法:手动发送重复消息、延迟 ACK、模拟网络问题。
消息积压和消费失败场景怎么处理?
消息积压时验证:积压告警是否触发、消费者是否能自动扩容、积压消息的优先级处理。消费失败时验证:是否有重试机制、重试次数和间隔是否合理、死信队列处理、人工补偿入口。还要验证监控和告警是否覆盖这些异常场景。
项目里怎么用
- 验证生产者投递成功和消费者确认机制,确保消息不丢失。
- 覆盖消息重复、顺序、延迟和丢失场景,验证系统的健壮性。
- 结合业务状态验证消息消费后的副作用,确保业务一致性。
- 测试死信队列和补偿机制,验证异常情况的处理。
- 监控消息积压情况,建立告警机制。
容易答错什么
只关注投递,忽略消费确认和幂等
消息投递只是第一步,关键是消费确认和幂等处理。
消费确认确保消息不丢失,幂等处理确保重复消费不产生副作用。
测试要覆盖:ACK 超时重投递、消费者崩溃后重新消费、网络问题导致的重复。
这些场景在生产环境经常发生。
不会讲消息积压和消费异常的补偿机制
消息积压和消费异常是线上常见问题。补偿机制包括:死信队列存储失败消息、定时重试、人工处理入口、监控告警。要说明如何测试这些机制的有效性,以及如何设计测试用例覆盖各种异常场景。
忽略跨服务消息链路的验证
消息队列连接多个服务,要验证完整链路:生产者是否正确发送、消息内容是否正确、消费者是否正确处理、下游服务是否正确接收。可以使用链路追踪查看消息流转,验证每个环节的正确性。跨服务验证是 MQ 测试的核心难点。