用 bref 编写的 SQS 工作者如何发出重试信号?

问题描述

设置 batchSize: 1 后,worker 应该如何指示成功以及它应该如何指示临时失败/请求重试?我读过 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 稍后重试。

解决方法

根据 bref 维护者的说法:

嘿,没错,就是这样:在处理程序中抛出一个异常,让它冒泡到 Bref(它会冒泡到 Lambda 然后是 SQS)。

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

,

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

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

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