AWS - Lambda 和 SQS 行为

AWS - Lambda and SQS behavior

我已经设置了 SQS、DeadLetterQue (DLQ) 和 lambda。我对 SQS 收到的正文格式有一些疑问。 经过一些尝试后,我可以看到一些消息在 DLQ 中结束。

我看了很多文档,但我真的还是搞不懂一些基本的东西。

我的任务很简单。我将使用 Axios 将一些有效负载发送到外部 API。 API 可能会给我一个错误,或者当时不可用。这段代码很简单,但是最后会包含axios的实现:

exports.handler = async (event, context) => {   
    event.Records.forEach(record => {
    const { body } = record;
    const { messageAttributes } = record;
    console.log(body)
    console.log(messageAttributes);
  });  
    let somethingWentWrongWithApi = new Error();
    throw somethingWentWrongWithApi;    
}; 

这是运行之后,一段时间后我在DLQ中看到消息,正如我所料,原来的SQS是空的。

在实际代码中,我会有 catch 块。在它里面我会抛出错误,就像在例子中一样。 Lambda 将尝试执行它三次(我不确定我从哪里得到这些信息)。然后,它将 return 发送到 SQS,然后 SQS 将其推送到 DLQ。

我想知道,我应该在 Lambda 中实现重试,并在三次后抛出错误...还是直接抛出并依赖现有流程(三次重试)?

我仍在阅读 SQS 和 Lambda 的不同设置。

要延长执行尝试,您必须前往:

  1. SQS 服务;
  2. 右键单击您的 SQS;
  3. 选择配置队列选项
  4. Dead Letter Queue Settings行下你可以看到一个 最大接收数 属性(您可以设置在 1 到 1000 之间)。

关于错误。如果 lambda 端出现问题然后 lambda 抛出错误,您可以检查 cloudwatch 抛出的错误类型。

  1. 转到 aws CloudWatch;
  2. 在右侧面板上找到日志;
  3. 选择日志组。

如果您有任何其他问题,请联系我。我会尝试回答他们,我会扩展这个答案。