You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Spring Boot中使用@SqsListener消费Amazon SQS消息后会自动删除?

@SqsListener消费后消息自动删除的原因

你此前对SQS原生机制的认知是完全正确的,消息自动删除不是SQS本身的原生行为,是Spring Cloud AWS框架对@SqsListener的封装逻辑。

  • SQS原生规则:消息会在你配置的留存周期内永久保留,直到到期自动删除;消费过程仅通过可见性超时规则锁定正在被处理的消息,消费者必须主动调用DeleteMessage API才能在留存周期到期前提前删除消息。
  • Spring Cloud AWS默认封装逻辑:@SqsListener的默认删除策略为ON_SUCCESS,只要被注解修饰的消费方法正常执行完成、没有抛出未捕获的异常,框架就会自动在后台调用SQS的DeleteMessage接口,删除这条已消费成功的消息。

你给出的示例代码使用的是@SqsListener的默认配置,因此方法正常执行完成后消息就会被自动删除:

@SqsListener("javatechie-queue")
public void loadMessageFromSQS(String message)  {
    logger.info("message from SQS Queue {}",message);
}

补充说明:如果消费方法执行过程中抛出未捕获的异常,框架不会触发自动删除操作,消息会在可见性超时结束后重新回到队列,可被其他消费者消费,和SQS原生机制保持一致。
如果你需要手动控制消息的删除时机,可以修改注解的删除策略配置:

// 关闭自动删除,手动控制删除时机
@SqsListener(value = "javatechie-queue", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void loadMessageFromSQS(String message, Acknowledgment acknowledgment)  {
    logger.info("message from SQS Queue {}",message);
    // 业务逻辑处理完成后手动调用确认删除
    acknowledgment.acknowledge();
}

内容的提问来源于stack exchange,提问作者Shambhavi Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:57:02