amazon-web-services - 使用 SQSEvent 对象从另一个函数调用 aws lambda 函数
问题描述
我有一个用 java 编写的 lambda 函数,其句柄方法签名为:
public String handleRequest(SQSEvent sqsEvent, Context context){
//Todo
}
我的 lambda 函数接受 SQS 事件作为请求并处理逻辑。
万一我的 lambda 函数以某种方式失败,我想通过手动提供所需的输入数据再次触发它。我的方法是创建一个新的 lambda 函数,它将调用我的主 lambda 函数。我将使用带有所需参数的 APIGateway 触发我的新 lambda。
我们如何创建自己的 SQS 事件对象以将其作为请求主体传递给我的主 lambda?SQSEvent 对象需要哪些参数和结构?
谢谢!
解决方案
有很多事情需要考虑:
默认情况下,Lambda 会重试几次失败的调用
如果 SQS 是您的事件源,则消息将保留在那里,直到您将其从代码中的队列中删除。如果您的功能失败并且没有删除该消息,它将在可见性超时到期后重新拾取
如果事件持续导致重复失败,将其反馈给函数将没有用,并且会导致无限循环
对于这种情况,建议设置DLQ,以便您可以隔离始终失败的消息。
现在,您的处理性质可能使其可以安全地重试而不必担心无限循环,在这种情况下,您可以编写一个函数,该函数将从 DLQ 中获取消息并将它们反馈回主队列,无需调用“main " 拉姆达直接。但话虽如此,我会非常仔细地查看最终以 DLQ 结尾的消息,它们可能表明您的代码中存在一些处理错误。
推荐阅读
- math - 为什么 BigInteger 实现使用符号幅度而不是二进制补码?
- scala - 使用 Window 时的性能问题
- java - 如何使用 SearchCriteria 类在 Spring Data jpa 中用户给出的许多术语上搜索用户
- python - 通过保留最小线宽替换多行字符串中的字符
- java - Java分治算法堆栈溢出错误
- python - 语法错误:解析 _ input.split 时出现意外 EOF
- sql - 如何使用 sql 查询从表中检索图像并将其保存到不同服务器的文件夹中
- .htaccess - 仅将多个域重定向到 https
- microsoft-edge - 呈现超过 50,000 行的表格时的边缘限制
- javascript - 浏览器正在取消多个文件下载请求