如何按组处理来自SQS队列的消息

How to process messages from SQS queues by groups

我目前有一个触发 lambda 函数的 SQS 队列,但 SQS 对传输中的消息有 120k 的限制,这意味着 lambda 消费者只能处理 120k 的消息。这在大多数情况下都可以正常工作。但是想象一下我有客户 A 和 B,如果 A 向队列发送 500k,之后 B 只发送 1 条消息,B 需要等待队列中的所有消息被处理。为每个客户端创建一个队列没有意义(至少不是手动)。例如,我怎样才能以循环方式处理来自客户端的消息,给每个人相同的时间来处理他们的任务?

我一直在研究 Kinesis 数据流,但不确定这是否能解决我的问题。我是否需要创建一个重定向到 lambda 的 SNS,该 lambda 负责将消息轮询到执行相同操作的队列,但这样我就可以避免将客户端 B 发送到与客户端 A 相同的队列?

您可以查看 SQS Fifo 队列。 Fifo 队列具有使用 group Id 属性进行分组的概念。一组中的所有消息都按顺序处理。限制是您在任何给定时刻只能处理每个组的一条消息。

上述概念与每个租户一个队列相同,只是使用一个专用队列。

参考 AWS 文档

https://aws.amazon.com/blogs/compute/solving-complex-ordering-challenges-with-amazon-sqs-fifo-queues/

关于在 SQS 内订购的文章

https://aws.amazon.com/blogs/compute/solving-complex-ordering-challenges-with-amazon-sqs-fifo-queues/

注:

FIFO 队列比标准队列更贵,请在做出任何决定之前参考定价指南。