gpt4 book ai didi

c# - aws lambda 函数出错时如何保留 AWS SQS 消息

转载 作者:行者123 更新时间:2023-12-02 16:13:10 25 4
gpt4 key购买 nike

最近在做一个项目,需要从 SFTP 下载文档并需要基于队列的实现。

所以我选择了使用 SQS 和 lambda 的实现。每当文档进入 SFTP 时,我都会通过 Web API 将文档信息推送到 SQS。在 SQS 消息正文中,我传递了文件名和其他信息。

还为 SQS 队列(使用 FIFO 队列)创建了一个 .net 核心 lambda 函数触发器。

public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context)
{
try
{
//trigger web api
var response = GetDocumentFromSFTP(message.Body).Result;
}
catch (Exception ex)
{
LambdaLogger.Log("Error::" + ex.Message);
}
}

如果调用外部 Web API 并返回标志 true 或 false 的 GetDocumentFromSFTP() 内部或其他地方发生任何错误,我如何将消息保留在 SQS 队列中而不删除,以便以后可以轮询相同的消息?

请帮忙?

更新:我已经将一些消息推送到队列中,它得到了处理,即使在可见时间结束后也看不到这些消息。但是抛出错误的消息我能够查看在死信队列中。请引用下图。这是已知行为吗?

SQS messages

最佳答案

AWS SQS 将消息保留在队列中(尽管是隐藏的),直到它被明确删除。这也适用于 AWS Lambda。该消息将一直隐藏到 visibility timeout。达到了。

引用找到的内容 here .

When Lambda reads a batch, the messages stay in the queue but become hidden for the length of the queue's visibility timeout. If your function successfully processes the batch, Lambda deletes the messages from the queue. If your function is throttled, returns an error, or doesn't respond, the message becomes visible again. All messages in a failed batch return to the queue, so your function code must be able to process the same message multiple times without side effects.

您可能还想阅读有关失败消息转到的 DLQ 的信息。这是一篇关于它的好文章:https://dev.to/piczmar_0/error-handling-in-aws-lambda-trigger-by-sqs-events-3amp

关于c# - aws lambda 函数出错时如何保留 AWS SQS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67490604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com