【问题标题】:I want to know when a batch of messages has completed in a AWS SQS Queue我想知道 AWS SQS 队列中的一批消息何时完成
【发布时间】:2020-11-06 12:07:44
【问题描述】:

我认为这更像是一个“架构设计”问题。

我有一个 lambda 生产者,它将把大约 600 条消息作为一个批次放在一个 SQS 队列(有多个生产者)上(所以不是 1 条消息,正文包含大约 600 条消息)。一个消费者 lambda,它将接收单个消息并(大规模)处理它们。我想要做的是在每批完成后运行另一个 lambda。

最初的想法是创建一个“唯一批次号”、一个“总批次号”和一个“批次位置号”,并将其添加到每条消息的消息属性中。然后在消费者 lambda 中检查这些以确定批处理是否完成。

但这是否意味着我需要在批次号上使用 FIFO 队列和分区,并且每个批次只有一个 lambda 消费者。或者我是否在 DynamoDB 中运行某种状态管理(这是一种模式吗?请指导我)。

问候,J

【问题讨论】:

  • 如果您有多个(并发?)生产者,您如何知道您何时发送了该批次的最后一条消息?

标签: amazon-web-services architecture amazon-sqs serverless


【解决方案1】:

目标似乎是在分布式系统中实现 Fork-Join 功能。在 AWS 中处理此问题的一种方法是使用 Step Functions。假设需要使用队列服务,则需要跟踪整个操作的状态。一些方法可以做到这一点:

  1. 将整个操作的状态存储在数据库中。
  2. 在所有其他消息之后将“终止”消息放入队列并处理 FIFO。
  3. 创建一个元数据服务,它接收每个服务的“启动”和“停止”消息并相应地处理它们。

参考:Fork and Join with Amazon Lambda

【讨论】:

  • 感谢您为我指明正确的方向。我将研究使用 MAP 使用具有动态并行性的步骤。
猜你喜欢
  • 2015-10-16
  • 2016-09-16
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 2019-02-02
  • 2020-03-24
相关资源
最近更新 更多