用 bref 编写的 SQS worker 如何发出重试信号?

How could a SQS worker written with bref signal a retry?

设置后batchSize: 1worker应该如何表示成功,应该如何表示临时失败/请求重试?我读过 https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html,但它显然没有涵盖自定义运行时,而且根本不清楚发生了什么,也没有谈论 SQS。我怀疑只是抛出一个异常可能就足够了,但我无法确定 什么 信号 Lambda。

https://medium.com/cs-code/setup-queue-with-serverless-laravel-using-bref-92b2cd803bb7这样的教程没有提到这一点。它讨论了 maxReceiveCount: 3 但没有讨论如何让 SQS 稍后重试。

我不确定自定义运行时,但在 Nodejs 中,如果您只是抛出一个错误,则该消息在 SQS 中可用,以防万一没有抛出错误,它会从 SQS 中删除。

maxRetryCount 之后为 sqs 配置一个死信队列,这样您的消息将在重试后转到 DLQ。解决失败原因后,您可以使用另一个 lambda 或 cli 将消息从 DLQ 移动到您的主 SQS。

SQS 不会重试自身,因为 lambda 从 SQS 进行长轮询。

根据 bref 维护者的说法:

Hey, yes that's exactly that: throw an exception in the handler and let it bubble up to Bref (which will bubble up to Lambda and then SQS).

https://github.com/brefphp/bref/discussions/911