SQS 中的批处理作业完成后如何获得通知

How to get notified once a batch job in SQS is completed

我正在使用 SQS 和 Lambda 的组合来执行批量 activity 以便我可以以受控的方式执行此操作,否则我将面临 API 速率限制异常(API 限制为 150 次调用/5 秒)。

此批处理作业完成后,我希望收到它完成的通知,以便我可以向用户发送消息或任何其他类型的通知。我怎样才能做到这一点?

实施 - SQS 接收批量消息,比如 10K。 Lambda(保留并发设置为 18)配置为 SQS 作为触发点,批量大小仅为 1 条消息。这个 lambda 函数执行一些计算和逻辑来更新我的程序的状态。 (每个函数在单个 运行 中命中大约 5 APIs) 完成整个工作大约需要 1 个半小时,而且我没有收到任何 API 速率限制异常。

有几种方法可以做到这一点。

例如,当您的 SQS 最初被填充时,您可以在 SQS 的 CW 指标上启用 CW 警报。警报可能会在 ApproximateNumberOfMessagesVisible 为零一段时间内触发。警报触发 SNS,后者又触发 lambda 函数。 lambda 函数将负责 验证 所有消息是否已正确处理(例如,关联的 DLQ 队列中没有消息,结果保存在某处),禁用警报并发出一些通知。

另一种方法是让您的 processing lambda 检查队列的状态。当队列有零条消息时,它可以发送 SNS 来触发其他 lambda。另一个 lambda 将再次验证是否所有消息都得到处理并发出通知。如果并行调用 lambda 函数,这可能会有点问题。

另一种方法是设置一个 CW 事件规则,例如每 5 分钟触发一次 lambda。最初填充 SQS 时将启用该规则。 lambda 将检查 SQS 队列的状态,如果队列为空且消息已正确处理,它将发出通知并禁用规则。

您显然可以组合这些可能性。希望这对您实现目标有所帮助。