使用 AWS SQS 的 DeliveryDelay 仅一次通知
Once only notification with DeliveryDelay with AWS SQS
在 Web 应用程序中,人们上传要处理的文件。每个文件的文件处理时间可能在 30 秒到 30 分钟之间,具体取决于文件的大小。在一个上传会话中,人们可以上传 1 到 20 个文件,这些文件可以分多个批次上传,批次之间的时间延迟最多为 5 分钟。
我想在处理完成时通知上传者,但又不想在 2-5 分钟时间段内第一批处理完成、另一批上传完成之前发送通知。 IE。上传者认为自己将多批文件作为一个文件上传 "work period",他可能每隔几天才这样做一次。
我没有实施定期检查,而是使用 AWS SQS 实施了通知:
- 在处理完每个文件后,一条消息将以 5 分钟的传递延迟发送到队列。
- 处理此消息时,它会检查是否还有任何其他文件仍在处理,如果没有,它会发送电子邮件通知
如果有多个文件在所有文件处理的最后 5 分钟内完成处理,则此方法会导致发送多封电子邮件。
作为解决此问题的方法,我考虑过使用具有相同 Deduplicationid 的 AQS SQS FIFO 队列,但我知道我需要传递具有相同 Deduplicationid 的最后一条消息,而不是第一条消息。
有没有更好的方法用事件驱动系统来解决这个问题?理想情况下,我想限制所需的队列数量,因为这个系统是非常原型驱动的,也不会引入另一个存储状态的地方——我已经有一个关系数据库。
您可以使用 AWS StepFunctions 来控制此类工作流。
1.上传文件到s3
2. 在 DynamoDB 中存储作业
3. 使用作业 ID 启动 StepFunction 流程
4.流程的最后一步是发送电子邮件通知
...
利润!
如果不使用@Ivan Shumov 所建议的某种原子中央存储,我无法找到一种方法来做到这一点
在我的案例中,关系数据库用于存储文件数据和各种处理指标,因此我将流程细化为:
- 在处理完每个文件后,一条消息将发送到
排队等待 5 分钟交货延迟。 5 分钟表示在单个工作会话中多个文件批次之间上传的最大时差。
- 当处理第一个文件时,建立一个唯一的处理 ID,与用户帐户一起存储并链接到该会话中的所有文件
- 处理此消息时,它会检查是否还有任何其他文件仍在处理,并检查是否存在针对该用户的处理 ID。
- 如果有针对用户的processing id,则清除用户和文件记录中的processing id,然后发送
在 Web 应用程序中,人们上传要处理的文件。每个文件的文件处理时间可能在 30 秒到 30 分钟之间,具体取决于文件的大小。在一个上传会话中,人们可以上传 1 到 20 个文件,这些文件可以分多个批次上传,批次之间的时间延迟最多为 5 分钟。
我想在处理完成时通知上传者,但又不想在 2-5 分钟时间段内第一批处理完成、另一批上传完成之前发送通知。 IE。上传者认为自己将多批文件作为一个文件上传 "work period",他可能每隔几天才这样做一次。
我没有实施定期检查,而是使用 AWS SQS 实施了通知: - 在处理完每个文件后,一条消息将以 5 分钟的传递延迟发送到队列。 - 处理此消息时,它会检查是否还有任何其他文件仍在处理,如果没有,它会发送电子邮件通知
如果有多个文件在所有文件处理的最后 5 分钟内完成处理,则此方法会导致发送多封电子邮件。
作为解决此问题的方法,我考虑过使用具有相同 Deduplicationid 的 AQS SQS FIFO 队列,但我知道我需要传递具有相同 Deduplicationid 的最后一条消息,而不是第一条消息。
有没有更好的方法用事件驱动系统来解决这个问题?理想情况下,我想限制所需的队列数量,因为这个系统是非常原型驱动的,也不会引入另一个存储状态的地方——我已经有一个关系数据库。
您可以使用 AWS StepFunctions 来控制此类工作流。 1.上传文件到s3 2. 在 DynamoDB 中存储作业 3. 使用作业 ID 启动 StepFunction 流程 4.流程的最后一步是发送电子邮件通知 ... 利润!
如果不使用@Ivan Shumov 所建议的某种原子中央存储,我无法找到一种方法来做到这一点
在我的案例中,关系数据库用于存储文件数据和各种处理指标,因此我将流程细化为:
- 在处理完每个文件后,一条消息将发送到 排队等待 5 分钟交货延迟。 5 分钟表示在单个工作会话中多个文件批次之间上传的最大时差。
- 当处理第一个文件时,建立一个唯一的处理 ID,与用户帐户一起存储并链接到该会话中的所有文件
- 处理此消息时,它会检查是否还有任何其他文件仍在处理,并检查是否存在针对该用户的处理 ID。
- 如果有针对用户的processing id,则清除用户和文件记录中的processing id,然后发送