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
EXPERTE
gefragt vor 6 Monaten20 Aufrufe
1 Antwort
0

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

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen