在阅读有关Lambda函数重试行为的SNS常见问题部分时,我遇到了以下语句:
问:如果订阅端点不可用,则Amazon消息会发生什么情况?:如果Lambda不可用,SNS将在1秒之间重试2次,然后10次从1秒到20分钟成倍倒转,最后每20分钟重复38次,总共在13小时内尝试50次,然后从SNS中丢弃。
据我所知,Lambda函数实现了自己的节流重试机制,如Lambda节流Bevaviour文档中所提到的。
异步调用:如果您的Lambda函数是异步调用的,并且是节流的,则AWS会自动重试节流事件长达6个小时,在重试之间会出现延迟。
那么,当函数被节流并出现另一条SNS消息时,究竟会发生什么呢?SNS是否将Lambda视为“可用”并中止重试机制,允许Lambda自动重试,还是继续重试传递消息?
发布于 2019-06-19 19:10:34
"available“一词指的是SNS与Lambda服务联系并提交一个调用函数的请求的能力。
要理解这一点,首先需要了解SNS的异步调用Lambda函数,然后才能理解其中的含义。
异步调用请求不向调用方(在本例中为SNS)提供任何反馈,无论函数是立即运行还是节流,还是成功或抛出异常。
SNS >> Lambda: "Hi, run this Lambda function asynchronously, with this payload."
Lambda >> SNS: "Okay, I received your request and will do that as soon as it is possible. Goodbye."
呼叫者(SNS)不关心下面的细节。成功地发出请求后,SNS将完成该消息的处理,现在由Lambda服务立即调用该函数和/或参与记录在案的Lambda重试行为。
SNS实际上每条消息只与Lambda服务联系一次。当它不能做到这一点时,Lambda是“不可用的”。这种事应该很少发生..。但是如果SNS无法联系,即当SNS参与SNS FAQ中描述的行为时--尝试提交调用函数的请求。一旦完成,SNS的角色就完成了,其余的由Lambda服务来处理。
每个消息在SNS/Lambda集成中独立处理,SNS尽快将每个消息发送出去,而SNS部分不知道函数调用是否随后被节流。
https://stackoverflow.com/questions/56670249
复制相似问题