为什么 AWS SNS 将订阅者的 404 响应视为成功?

Why is AWS SNS treating 404 response from subscriber as successful?

我很难理解 SNS 如何处理响应消息。我的 SNS 订阅者是一个可能会出现故障或只是 return 4xx 错误的页面。

虽然出于某种原因,SNS 似乎将 return 4xx 错误代码的请求视为成功。

当响应代码是 4xx 而不仅仅是 5xx 时,如何让它失败?

从日志中我们可以看到订阅者 return 状态代码为 404 Not found,但尽管如此,请求的状态仍然是 SUCCESS。

{
    "notification": {
        "messageMD5Sum": "fd746e97153916fd99bba*********",
        "messageId": "be666c50-8de5-594b-9e77-*********",
        "topicArn": "arn:aws:sns:us-east-1:060758096283:*********,
        "timestamp": "2021-11-23 14:21:23.778"
    },
    "delivery": {
        "deliveryId": "ef278086-2a70-5512-a191-da90d1534d24",
        "redrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:*********:*********-DLQ\"}",
        "destination": "*********/subscriber.php",
        "providerResponse": "Not Found",
        "dwellTimeMs": 80,
        "attempts": 1,
        "statusCode": 404
    },
    "status": "SUCCESS"
}

这导致了我的监控问题,因为如果不手动查找,很难知道我的请求是否真的成功。

SNS 的工作是将消息传递到端点。如果端点响应有效状态代码(不是 5XX 失败),它认为消息的 delivery 成功。如何回复该消息取决于接收方 API.

准确地说,只有在 200 - 499 范围之外的状态代码才会被视为失败,并根据 https://docs.aws.amazon.com/sns/latest/dg/sns-message-delivery-retries.html 的重试策略进行重试。一旦达到最大重试次数,消息将被传递到 DLQ(如果已配置)。