首页 > 解决方案 > 使用 SQSEvent 对象从另一个函数调用 aws lambda 函数

问题描述

我有一个用 java 编写的 lambda 函数,其句柄方法签名为:

public String handleRequest(SQSEvent sqsEvent, Context context){ //Todo }

我的 lambda 函数接受 SQS 事件作为请求并处理逻辑。

万一我的 lambda 函数以某种方式失败,我想通过手动提供所需的输入数据再次触发它。我的方法是创建一个新的 lambda 函数,它将调用我的主 lambda 函数。我将使用带有所需参数的 APIGateway 触发我的新 lambda。

我们如何创建自己的 SQS 事件对象以将其作为请求主体传递给我的主 lambda?SQSEvent 对象需要哪些参数和结构?

谢谢!

标签: amazon-web-servicesaws-lambdaamazon-sqs

解决方案


有很多事情需要考虑:

  1. 默认情况下,Lambda 会重试几次失败的调用

  2. 如果 SQS 是您的事件源,则消息将保留在那里,直到您将其从代码中的队列中删除。如果您的功能失败并且没有删除该消息,它将在可见性超时到期后重新拾取

  3. 如果事件持续导致重复失败,将其反馈给函数将没有用,并且会导致无限循环

对于这种情况,建议设置DLQ,以便您可以隔离始终失败的消息。

现在,您的处理性质可能使其可以安全地重试而不必担心无限循环,在这种情况下,您可以编写一个函数,该函数将从 DLQ 中获取消息并将它们反馈回主队列,无需调用“main " 拉姆达直接。但话虽如此,我会非常仔细地查看最终以 DLQ 结尾的消息,它们可能表明您的代码中存在一些处理错误。


推荐阅读