首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中递归调用aws-lambda

在java中递归调用aws-lambda
EN

Stack Overflow用户
提问于 2021-03-06 02:45:36
回答 2查看 63关注 0票数 0

我想从Aurora mysql中获取产品I,并使用lambda将它们发送到SQS。

伪代码:

代码语言:javascript
复制
int limit = 90,000;
int offset = 0;

//set db connection
query = ("select product id from products limit " +limit + " offset " + offset);
while(rs.next())
{
pid = rs.getString(1);
...
//code to send pid to sqs 
}

if(context.getRemainingTimeInMillis() < 10000)
{
//call this lambda again
offset = offset + limit;
//call same lambda with updated offset and repeat this until all the records are fetched
}

我不知道如何调用aws-lambda recursively,以便sql查询每次都会获得更新后的偏移量。以及如何在这个lambda中进行错误处理,以便如果某些lambda失败,它应该重试。我的表中的pids总数约为700万,在1次调用中,我能够向队列发送90k条记录。

EN

回答 2

Stack Overflow用户

发布于 2021-03-06 04:23:18

这可能不是Lambda的工作。我可能会先使用AWS Batch或ECS Task。

您可以对当前代码进行一些改进。看起来你一次只能发送一条消息给SQS,但你最多可以发送10条。

根据您处理消息的方式,将它们批量处理为包含1,000个或更多ID的消息可能是有意义的。

但是,如果您打算使用Lambda并编写单独的SQS消息,那么您需要理解invoke()操作。您将需要异步调用,并且需要将偏移量打包到JSON blob中。

如果采用这种方式,我建议将时间检查移到循环中:对于处理的每条记录,递增index变量。发送消息后,检查时间并在必要时再次调用该函数,传递当前索引。然后跳出这个循环。

票数 1
EN

Stack Overflow用户

发布于 2021-03-12 20:54:33

在无服务器中实现递归的另一种方法是使用调度的lambda。

基本上,你会有一个lambda运行,比如说每15分钟运行一次。

关于偏移量,我建议将记录标记为已处理,而不是尝试传递offset参数。

您的查询将如下所示:

代码语言:javascript
复制
query = ("select product id from products WHERE processed=false AND limit=" +limit); 

然后我们需要回答这个问题,我们什么时候停止预定的lambda?

如果您有有限数量的记录,您可以在知道所有记录都已处理后,禁用定期触发lambda的云监视规则,否则我们最好让lambda永远运行:)

关于如何按计划触发lambda的Documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66497988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档