如果我订阅了 AWS SNS 主题的 lambda 作业出现故障或停止工作怎么办?

What if my lambda job, which is subscribed to an AWS SNS topic, goes down or stops working?

我在 AWS 中的 SNS 主题有一个发布者和一个订阅者。 假设我的订阅者失败并退出。

SNS会重新推送失败的消息吗?

如果没有...

是否有另一种方法可以实现我的系统从上次成功的 lambda 执行开始处理的目标?

有重试政策,但如果您的应用程序已经收到消息,则没有。如果出现问题,您将不会再看到它,而且由于 Lambda 不携带状态...您可能会有麻烦。

我可能会考虑查看 SQS 而不是 SNS。请记住,在您删除 SQS 中的消息之前,它们不会被删除,并且您可以设置 window 隐身。因此,您可以轻松确保下一次 Lambda 执行从中断的地方开始(取决于您的设置)。然后每个 Lambda 将负责从 SQS 中删除该消息,这就是您知道消息已被处理的方式。

在不了解您的应用程序和需求的情况下,我不能肯定...但我会看一看。我在 运行 之前按计划构建了一个 "taskmaster" Lambda 并从 SQS 队列读取(实际上是多个队列 - 计划的作业根据要读取的队列传递不同的 JSON 事件).然后它会将作业传递给适当的 Lambda "worker",后者随后会删除该消息。如果它停止工作......好吧,隐身期会超时(这里 5 分钟也不错,因为这是 Lambda 可以执行的所有时间),下一个 Lambda 会接管它。 taskmaster 然后会根据需要经常 运行 并根据需要从队列中读取尽可能多的作业。这确实可以帮助您完全控制处理事情的速度、重试次数等。然后您还可以使用死信队列来捕获任何可能失败的事情(另外,想想把东西放回队列中)。

SQS 具有很大的灵活性,老实说,我不太确定 SNS 是否具有灵活性。我从不喜欢 SNS,虽然它也有地点和时间,所以在这里我不知道更多我不能说 SQS 是否适合你......但我认为你的担忧可以通过 SQS 解决如果它对您的应用有意义。