【问题标题】:Amazon SNS delivery retry policies for SQSSQS 的 Amazon SNS 传输重试策略
【发布时间】:2015-08-25 07:59:36
【问题描述】:

我们正在使用具有多个 SQS 队列订阅者的 SNS 主题实施 AWS 扇出模式。我想知道如果我成功地在 SNS 主题上发布了一条消息,但它(由于某种原因)未能将其转发到队列,会发生什么情况。 SNS 会重试吗?如果是,有没有办法控制。

我发现这个页面 http://docs.aws.amazon.com/sns/latest/dg/DeliveryPolicies.html 讨论了为 SNS HTTP/HTTPS 端点配置重试策略,但在 SQS 上没有任何内容。

【问题讨论】:

    标签: amazon-web-services amazon-sqs amazon-sns


    【解决方案1】:

    我是 SNS 开发团队的成员。对于 SQS 交付,SNS 会在放弃之前重试数千次。除非发生灾难性的多日中断,否则可以保证向 SQS 传递消息。

    【讨论】:

    • 嗨 George,您实际上是 Amazon AWS 员工吗?我提出问题的原因是因为我得到的信息来自亚马逊聘请的 AWS 解决方案架构师,他坚持认为 SNS 会重试 3 次然后失败!
    • 如果您阅读有关“SNS 传递策略”的部分,您会看到您可以配置重试次数(默认为 3)和重试间隔:docs.aws.amazon.com/sns/latest/dg/DeliveryPolicies.html
    • aws lambda 怎么样?
    • 我们使用 SNS 而不是 SQS,有些订阅者收不到消息。但是我们的交付政策有 10 次重试。
    • sns如何知道消息是否已经成功投递给订阅者?
    【解决方案2】:

    实际上,AWS 保证从 SNS 向 SQS 传递消息。由于问题引用如下,我想指出向 SQS 交付失败的原因。

    我想知道如果我成功发布消息会发生什么 在 SNS 主题上,但未能(出于某种原因)将其转发到队列。

    只有当我们指向的 SQS 已被某个进程删除(或正在删除)时,才会发生这种情况。取自SNS Faqs,如果 SQS 不可用,它将重试多次,直到消息被丢弃。

    SQS:如果某个 SQS 队列不可用,SNS 会重试 10 次 立即,然后每 20 秒 100,000 次,总共 在邮件发送前 23 天以上的 100,010 次尝试 从 SNS 中丢弃。

    @grigori 在评论中指出了这一点。

    【讨论】:

      【解决方案3】:

      SQS 和 SNS 在 2013 年和 2014 年是一个团队,当时我是该团队的开发人员。正如 George Lin 所指出的,负责传递的 SNS 后端确实会为 SQS 队列重试数千次(确切的数字是 100,000 次,但可能已经改变)。有一个隐式的退避策略。在第一次尝试本身中,将在一个非常紧凑的循环中进行数千次重试,没有延迟。如果失败了,则会有退避政策逐渐尝试随着时间的推移交付。一般来说,向 SQS 端点的交付很少会失败。

      【讨论】:

        【解决方案4】:

        AWS 保证交付到 SQS,因此您无需担心:

        问:Amazon SNS 会保证将消息传送到订阅的端点吗?

        当消息发布到主题时,Amazon SNS 将尝试 向为该主题注册的所有订阅者发送通知。 由于潜在的互联网问题或电子邮件传送限制, 有时通知可能无法成功到达 HTTP 或电子邮件 终点。在 HTTP 的情况下,SNS 传递策略可用于 控制重试模式(线性、几何、指数退避), 最大和最小重试延迟,以及其他参数。 如果是 成功处理所有已发布的消息至关重要, 开发人员应该将通知发送到 SQS 队列(在 除了通过其他传输的通知)。

        http://aws.amazon.com/sns/faqs/

        【讨论】:

        • 我已经联系了澳大利亚的 AWS 解决方案架构师,他们关于交付“保证”的立场是“在 SQS 因任何原因不可用的情况下 - 在任何非常小的机会失败 – SNS 将尝试 3 次,但如果 SQS 没有及时恢复,那么您将消息推送到队列的意图可能无法实现。”
        • @grigori 那么这个答案不正确吗?你找到保证交货的方法了吗?
        猜你喜欢
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2022-08-20
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多