AWS SQS消息量超出拉取上限时剩余消息是否会丢失?
问题解答
结论
其余1000条消息不会丢失,会在队列中已有消息被处理删除后正常进入待消费状态。
核心原因说明
你需要先理清几个配置的实际作用,就很容易理解这个逻辑:
- 你配置的
Maximum message count: 500是Lambda每次轮询从SQS拉取消息的单批次上限,不是SQS队列本身的存储容量上限。标准SQS队列默认支持最多120000条待处理消息,远大于你本次的1500条消息总量,1500条可以全部正常存入队列。 - SQS的消息保留期配置为4小时,意味着只有消息存入队列后超过4小时没有被消费并删除,才会被系统自动清理。你使用的Lambda每半小时触发一次,每次最多处理500条,1500条消息总共只需要3次触发、耗时最多1.5小时就能全部处理完成,远小于4小时的保留阈值,不会触发过期删除逻辑。
实际处理流程
- 1500条消息全部写入SQS队列后,都处于可被拉取的状态
- 第一次Lambda触发,拉取最多500条消息进行处理,处理完成后删除这500条,剩余1000条仍留在队列中等待被拉取
- 半小时后第二次Lambda触发,再拉取500条处理删除,剩余500条等待
- 第三次Lambda触发后拉取剩余500条处理完成,队列清空
只有当你配置的消息保留期小于消息总处理耗时,或者队列出现长时间的消费者故障时,才会出现消息丢失的情况,你当前的场景不存在这类问题。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

