消息写入 SNS 主题,但没有订阅 SQS 队列

Message written to SNS topic, but no SQS queue subscribed

我想知道如果有一个 SNS 主题写入了消息,但是一段时间内没有 SQS 队列,会发生什么情况。假设有一个容器,它通常订阅了 SNS 主题来处理此类消息,但它崩溃并烧毁并花了 10 分钟才复活;在没有队列的情况下,写入该主题的任何消息会发生什么情况?他们是永远消失,还是礼貌地等待,直到某个队列出现、订阅并接收所述消息?

他们永远消失了。

SNS 无法知道某些订阅者想要订阅,但现在根本无法订阅。该主题要么有订阅者,要么没有。所有当前订阅者都会收到消息,所有未来订阅者都不会。

如果您有订阅者但传送失败,则在重试方面存在一些 SNS 特定行为:https://docs.aws.amazon.com/sns/latest/dg/sns-message-delivery-retries.html

如果订阅者未能收到消息,SNS 中的重试机制将启动,如 AWS docs 中所述:

When the delivery policy is exhausted, Amazon SNS stops retrying the delivery and discards the message—unless a dead-letter queue is attached to the subscription.

对于 SQS 订阅者,重试最多可达 100,015 times, over 23 days

如果 SQS 队列出现故障,则消息不会消失,让我们讨论一下这种情况:

重试策略 :-** 假设您将“重试次数”设置为 n和“Retry-backoff函数”作为线性(您可以select任何其他retry-backoff函数)在 SNS 主题中,如果 SQS 不可用,则 SNS 将根据“Retry-backoff 函数”。

但是,如果您将重试次数设置为 0,那么如果订阅者 (SQS) 不可用,您的消息将立即从 SNS 主题中删除