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

为何AWS SNS将订阅方返回的404等4xx响应判定为推送成功?

AWS SNS 4xx响应判定为交付失败配置方案

AWS SNS的HTTP/HTTPS订阅默认交付判定规则为:仅5xx服务端错误、连接超时、SSL握手失败等场景判定为交付失败,触发重试/推死信队列逻辑;4xx类状态码默认被判定为不可恢复的客户端永久错误,认为重试也无法解决问题,因此会直接标记为SUCCESS状态,不会触发重试流程,你遇到的404被标记为成功就是这个逻辑导致的。

配置方法

你可以通过自定义订阅的交付策略,指定需要判定为失败的4xx状态码,配置后对应状态码的响应会被识别为交付失败,走重试流程,重试次数耗尽后会推送到你配置的DLQ,状态也会标记为FAILED。

控制台配置步骤

  • 进入AWS SNS控制台,找到对应主题下的目标HTTP/HTTPS订阅
  • 开启「覆盖主题默认交付策略」选项
  • 在交付策略的JSON配置中添加4xxRetryPolicy字段,示例配置如下:
{
  "http": {
    "defaultHealthyRetryPolicy": {
      "minDelayTarget": 20,
      "maxDelayTarget": 20,
      "numRetries": 3,
      "backoffFunction": "linear"
    },
    "4xxRetryPolicy": {
      "retryOn4xxStatusCodes": [404, 403, 408, 429]
    }
  }
}
  • 保存配置即可生效。

AWS CLI配置命令

你也可以通过CLI快速配置,替换为你的订阅ARN和需要重试的4xx状态码即可:
aws sns set-subscription-attributes --subscription-arn 你的订阅ARN --attribute-name DeliveryPolicy --attribute-value '{"http":{"4xxRetryPolicy":{"retryOn4xxStatusCodes":[404,403,429]}}}'

注意事项

  • 按需配置需要重试的4xx状态码,不建议将所有4xx都加入重试列表,比如400(请求参数异常)这类SNS端触发的错误重试无效
  • 可以配合SNS交付状态日志功能,直接过滤FAILED状态的请求做监控告警,无需手动核对每个请求的状态码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:03