AWS SQS 块在背压情况下出列
AWS SQS block dequeue in case of back pressure
在 lambda worker 处理来自 SQS 队列的批次的情况下,是否有一个选项可以监控 worker 的失败率(wrt 处理作业)并阻止进一步出队(以及因此,lambda 调用)以防失败率超过门槛?我可以监控 lambda 的 error/invocation 速率,但是如何实现出列停止?我不想清空队列并丢失数据。
首先要了解您的 Lambda 可能(可能)失败的原因:
1) 如果它们因节流而失败(要处理的消息多于可用的 Lambda 函数),消息(或整个批次)将被发送回队列,并在可见性超时后重试过期,因此重试逻辑已经为您内置并且可以很好地扩展。
2) 如果它们由于错误消息或代码中的某些错误而失败,您可以配置 DLQ 以将失败消息发送到。这很容易设置,因为您只需要告诉您的 Lambda 函数在出现故障时连接到哪个 DLQ。
如果您的情况是 1),请放心您的消息不会丢失。如果你的场景是2),只需配置一个DLQ来进一步分析失败的消息。
您还可以查看 official docs 以了解 Lambda 的重试行为
在 lambda worker 处理来自 SQS 队列的批次的情况下,是否有一个选项可以监控 worker 的失败率(wrt 处理作业)并阻止进一步出队(以及因此,lambda 调用)以防失败率超过门槛?我可以监控 lambda 的 error/invocation 速率,但是如何实现出列停止?我不想清空队列并丢失数据。
首先要了解您的 Lambda 可能(可能)失败的原因:
1) 如果它们因节流而失败(要处理的消息多于可用的 Lambda 函数),消息(或整个批次)将被发送回队列,并在可见性超时后重试过期,因此重试逻辑已经为您内置并且可以很好地扩展。
2) 如果它们由于错误消息或代码中的某些错误而失败,您可以配置 DLQ 以将失败消息发送到。这很容易设置,因为您只需要告诉您的 Lambda 函数在出现故障时连接到哪个 DLQ。
如果您的情况是 1),请放心您的消息不会丢失。如果你的场景是2),只需配置一个DLQ来进一步分析失败的消息。
您还可以查看 official docs 以了解 Lambda 的重试行为