我正在开发一个用例,其中我们有多个来自上游的事件,并且我们可能会有 1 名员工的多个事件。但我们希望确保 1 名员工只有 1 个活动进程,并且我们希望延迟处理具有相同员工 ID 的其他事件,但可以处理不同员工的事件。在这样做的同时,我们仍然希望维持员工的事件顺序。
我正在考虑以下方法
FIFO SQS → Lambda - 在这个场景中,我们可以基于员工(也许在 dynamoDB 中)使用锁,并且如果该员工有活动锁,则 lambda 可以重新排队事件。但我不知道如何才能维持这里的秩序?如果我们在 FIFO 中重新排队事件,新事件不会在重新排队的事件之前先得到处理吗?
比这更简单。
只需使用 Amazon SQS FIFO 队列并在
MessageGroupId
中指定员工 ID。
来自 使用 Amazon SQS 消息组 ID - Amazon Simple Queue Service:
是指定消息属于特定消息组的标签。属于同一消息组的消息总是按照相对于该消息组的严格顺序一一处理(但是,属于不同消息组的消息可能会乱序处理)。 如果批量大小大于 1,则可以在单个MessageGroupId
ReceiveMessages()
调用中检索具有相同 MessageGroupId 的多条消息,但它们将按顺序排列。如果批量大小为 1,则对于给定的 MessageGroupId,只有一个消费者会收到一条消息。