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 的不同设置。
要延长执行尝试,您必须前往:
- SQS 服务;
- 右键单击您的 SQS;
- 选择配置队列选项;
- 在Dead Letter Queue Settings行下你可以看到一个
最大接收数 属性(您可以设置在 1 到 1000 之间)。
关于错误。如果 lambda 端出现问题然后 lambda 抛出错误,您可以检查 cloudwatch 抛出的错误类型。
- 转到 aws CloudWatch;
- 在右侧面板上找到日志;
- 选择日志组。
如果您有任何其他问题,请联系我。我会尝试回答他们,我会扩展这个答案。
我已经设置了 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 的不同设置。
要延长执行尝试,您必须前往:
- SQS 服务;
- 右键单击您的 SQS;
- 选择配置队列选项;
- 在Dead Letter Queue Settings行下你可以看到一个 最大接收数 属性(您可以设置在 1 到 1000 之间)。
关于错误。如果 lambda 端出现问题然后 lambda 抛出错误,您可以检查 cloudwatch 抛出的错误类型。
- 转到 aws CloudWatch;
- 在右侧面板上找到日志;
- 选择日志组。
如果您有任何其他问题,请联系我。我会尝试回答他们,我会扩展这个答案。