目前,我有一个触发Lambda (A)的进程,它具有逻辑,可以找出(通过队列)运行另一个lambda (B)所需的客户。对于任何运行,由Lambda在SQS队列上放置3k到4k消息,由Lambda获取以进行处理。当Lambda与外部Api通信时,将Lambda的并发设置为10,这样就不会使Api超载。整个过程在35到45分钟内完成。
我的问题是如何判断什么时候所有的处理都完成了?
发布于 2022-10-16 02:37:03
如果您不需要及时的信息,您可以查看SQS报价的SQS报价度量,例如:
ApproximateNumberOfMessagesVisible 可从队列中检索的消息数量。报告标准:如果队列处于活动状态,则报告非负值。
和
ApproximateNumberOfMessagesNotVisible 正在运行的消息数量。如果消息已发送到客户端,但尚未被删除或尚未到达其可见窗口的末尾,则视为正在运行。报告标准:如果队列处于活动状态,则报告非负值。
如果这两个指标之和为零,队列中就没有消息,应该进行处理。
如果您需要更及时的信息,消息的生产者可以在DynamoDB中增加一个计数器项,并添加消息的数量,并且每个Lambda都会减少计数器的数量。然后,可以使用过滤器将Lambda添加到该表的DynamoDB流中,并在值再次变为零时执行一些操作。然而,这要复杂得多。
第三种选择是将整个事件转换为一个逐步函数,并使用带有并行化因子的映射状态来执行任务。缺点是它可以处理的列表的长度是有限的。
https://stackoverflow.com/questions/74086155
复制