等待特定数据到达SQS的AWS Step Function

问题描述 投票:0回答:1

我想在 AWS 中创建一个由 SQS 事件触发的 Step Function。

SQS 中的事件有 2 种类型:

typeA
typeB
typeA
消息有一些 ID 和一个字段,其中包含预计到达的
typeB
消息数量。
typeB
有自己的ID和他的
typeA Id
的父母。

这意味着类型之间存在某种关系:

typeA
是父级,
typeB
是子级。

typeA
到达时,我想开始等待其所有子级到达,如果 1 小时内没有发生,则返回一些特定状态。

typeB
到达时,我想开始计算他的所有兄弟姐妹,并且只有当所有兄弟姐妹都到达时,才调用某个 Lambda 函数来根据
typeB
消息中的附加信息计算最终状态。

如何在不使用数据库的情况下实现这种等待非常具体的数据到达/从 SQS 获取的情况?也许 Step Functions 不是该架构的正确选择?

我尝试创建一些流程,但不知道如何对特定数据执行等待或事务的主要流程。

amazon-web-services amazon-sqs aws-step-functions
1个回答
0
投票

我认为 Amazon SQS 不适合您的架构。

从 Amazon SQS 队列检索消息时,无法“选择性”请求消息类型。相反,SQS 只是从队列中为您提供随机消息(好吧,不是完全随机的,但最好这样考虑它们)。因此,与

typeB
消息相比,无法知道队列中有多少
typeA
消息。

您可以创建两个独立的 SQS 队列——一个用于

typeA
,另一个用于
typeB
。但是,您仍然无法知道特定
typeB
父 ID 的队列中存在多少
typeA
消息。因此,如果您的系统正在等待来自多个“父级”的消息,那么您将不知道队列何时具有特定父级所需的消息数量。

相反,您的系统需要从 SQS 队列中检索消息并将它们存储在某处,同时等待最终处理它们的条件。 “某处”可以是数据库(例如 DynamoDB),甚至是 Amazon S3(也可以被视为 NoSQL 数据库)。例如,消息可以存储在 S3 中基于“父”ID 的目录中。每次消息到达并存储在 S3 中时,Lambda 函数都可以计算该目录中存储的消息数量。如果计数满足要求的总数,则可以触发最终处理。

© www.soinside.com 2019 - 2024. All rights reserved.