SQS事件会直接触发 lambda,是否有办法将执行时间延迟 10-20 秒?

0

【以下的问题经过翻译处理】 我正在构建一个无服务器的网页爬虫,其中有一个Lambda函数,逐个将n个URL(n>>m)从m个网站中加入到消息队列中。然后,我有一个SQS触发器,它调用另一个Lambda函数,该函数获取URL并进行网页抓取。

我将SQS触发器的批处理大小设置为1,并限制了Lambda的并发调用数为1。问题是,我想在每次抓取之间有20-40秒的暂停,但目前没有暂停而且只执行函数(大约需要10秒)。

有什么办法可以做到这一点,还是说我必须重新考虑当前的架构?

更新:问题在于,将消息添加延迟并不能解决我的问题。当我使用延迟时,每条消息出队需要x秒。但由于每隔3秒就会添加一条新消息,所以出队操作只会在20秒后执行,而不是在初始入队后的20、40、60、80、100秒执行。

解决方案:我采用了一种修改后的方法。现在,我有一个定时事件,每分钟触发一次Lambda。然后,Lambda从队列中获取消息。修改的部分是,当队列为空时,禁用了定时作业。如果添加了元素,它会再次启用。

profile picture
专家
已提问 5 个月前15 查看次数
1 回答
0

【以下的回答经过翻译处理】 您还可以设置一个Lambda函数,由计时器(CloudWatch事件)每30秒触发一次。它会从队列中读取一个项目,如果队列中没有消息,则立即退出。每30秒一次的调用成本相对较低,您可以确保不会超过这个速率进行网页抓取。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则