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

使用@SqsListener未显式指定确认模式的三类技术疑问

@SqsListener 相关疑问解答

问题1:未显式指定确认模式时的默认行为

是的,未指定确认模式时,默认采用AUTO_ACKNOWLEDGE模式。只要监听方法正常执行完成(无异常抛出),消息会自动被确认并从SQS队列中删除;若方法执行抛出异常,消息不会被确认,会按SQS重试策略回到队列。

问题2:deletePolicy=ON_SUCCEEDED与确认模式的关系

deletePolicy=ON_SUCCEEDED不属于标准JMS确认模式,它是Spring Cloud AWS提供的上层配置项,但功能和AUTO_ACKNOWLEDGE高度相似——都是在监听方法成功执行后触发消息删除。

两者不会产生冲突,因为deletePolicy本质是对底层确认模式的封装映射:设置deletePolicy=ON_SUCCEEDED时,底层会对应使用AUTO_ACKNOWLEDGE逻辑;若设置deletePolicy=NEVER,则对应手动确认模式,需开发者主动触发确认操作。

问题3:显式指定确认模式的示例

在@SqsListener注解中,通过acknowledgmentMode属性可显式指定确认模式,以下是常见场景示例:

示例1:显式指定自动确认模式

@SqsListener(value = "${my-queue}", acknowledgmentMode = AcknowledgmentMode.AUTO)
public void listenToMyQueue(MyEvent event) {
    // 业务逻辑处理
}

示例2:显式指定手动确认模式

需手动控制确认时机时,指定AcknowledgmentMode.MANUAL并注入Acknowledgment对象:

@SqsListener(value = "${my-queue}", acknowledgmentMode = AcknowledgmentMode.MANUAL)
public void listenToMyQueue(MyEvent event, Acknowledgment acknowledgment) {
    try {
        // 业务逻辑处理
        // 手动确认消息,触发队列删除
        acknowledgment.acknowledge();
    } catch (Exception e) {
        // 异常场景下不确认,消息重回队列
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:17:37