Amazon web services AWS-在SNS订阅或Lambda函数上设置死信队列有什么区别?

Amazon web services AWS-在SNS订阅或Lambda函数上设置死信队列有什么区别?,amazon-web-services,aws-lambda,amazon-sns,serverless,dead-letter,Amazon Web Services,Aws Lambda,Amazon Sns,Serverless,Dead Letter,在SNS主题或Lambda函数上设置死信队列有什么区别 我想知道,如果您在SNS订阅上设置DLQ,那么当Lambda(订户)失败时,订阅消息将故障转移到DLQ,对吗?那么在这种情况下,在这两个地方设置DLQ会有相同的效果吗 我在SNS主题订阅上设置了一个DLQ,但它并没有“自动”显示为Lambda屏幕设置上的DLQ,所以我认为可能有一些不同 SNS死信队列引用: 通常,当Amazon SNS由于客户端或服务器端错误而无法访问订阅的端点时,消息传递会失败 Lambda死信队列参考: 在标准重试策略

在SNS主题或Lambda函数上设置死信队列有什么区别

我想知道,如果您在SNS订阅上设置DLQ,那么当Lambda(订户)失败时,订阅消息将故障转移到DLQ,对吗?那么在这种情况下,在这两个地方设置DLQ会有相同的效果吗

我在SNS主题订阅上设置了一个DLQ,但它并没有“自动”显示为Lambda屏幕设置上的DLQ,所以我认为可能有一些不同

SNS死信队列引用:

通常,当Amazon SNS由于客户端或服务器端错误而无法访问订阅的端点时,消息传递会失败

Lambda死信队列参考:

在标准重试策略(失败时再重试2次)用尽后,AWS Lambda将调用Lambda函数的事件对象写入此[DLQ]端点

拉姆达:

SNS订阅:


SNS DLQ专门针对SNS,其好处是它还可以解释客户端错误,例如Lambda服务关闭。这将确保如果Lambda服务关闭,则消息可以稍后重播到Lambda,而如果DLQ连接到Lambda,则仅在服务运行时才考虑重播

然而,正如我所提到的,SNS DLQ仅用于来自SNS的通知,而Lambda可以支持来自任何传入事件的DLQ。这意味着如果你有多个SNS主题,或者一个SNS主题和一些SQS队列,你只需要将它应用到Lambda本身


这两个服务都使用SQS作为其DLQ,因此从这两个服务的摄取/检索是相同的。如果您在两项服务上都有DLQ,那么是的,您可能最终会得到两份事件/通知副本,但是您不太可能同时得到这两份副本,因为理论上Lambda端点会承认SNS会将其视为已发送,如果DLQ失败,Lambda有责任将其添加到DLQ中。

这很有意义,谢谢,所以像DynamoDB事件这样的事情可以通过Lambda DLQ重放。为了澄清这一点,如果Lambda在收到SNS消息后崩溃,是否会触发SNS DLQ?i、 e.SNS需要Lambda的成功响应,以确认SNS msg已被消费,对吗?Lambda状态的文档对于异步调用,Lambda将消息排队并处理重试。如果Amazon SNS无法访问Lambda或邮件被拒绝,Amazon SNS将在几个小时内以递增的间隔重试。有关详细信息,请参阅Amazon SNS常见问题解答中的可靠性。因此,如果Lambda服务失败或您通过回调拒绝,它将重试,我将假设添加到SNS的DLQ。太好了,我猜,引发未捕获异常的Lambda也算作拒绝。:+1: