如何根据每种消息类型限制SQS队列接收者的最大并发数?

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

我的 lambda 函数返回一堆我想要发送到外部服务的请求。此外部服务的 api 具有以下速率限制:

Paramters: 
type: enum
content: list of n elements

Rate limit: 
For each type, there can be no more than 3 concurrent slots. Each slot will be will need to wait n milliseconds between requests. 

我想限制正在发送的请求。我的设计是使用 sqs 对请求负载进行排队,并设置一个自动缩放 lambda 来使用它们。 sqs 配置包括 max_concurrency,但我没有看到基于消息内容进行配置的方法。

有没有办法使用SQS实现上述速率限制节流?或者我应该使用其他解决方案,例如 Amazon MSK?

示例:

对于下面的队列,我希望 lambda 函数能够同时处理类型 1 的 3 条消息、类型 2 的 3 条消息,依此类推。

queue: 
type=1, payload
type=1, payload
type=1, payload
type=1, payload
type=2, payload
type=2, payload
type=2, payload
type=3, payload
amazon-web-services aws-lambda amazon-sqs aws-msk
1个回答
0
投票

您需要:

  • 将 AWS Lambda 函数配置为具有 预留并发 = 3
  • sleep
    命令添加到 Lambda 函数末尾以等待所需的时间

预留并发 - AWS Lambda 将确保最多可以同时运行 3 个函数。

sleep
将延迟下一个功能的开始。不幸的是,这意味着 Lambda 函数将运行更长时间,并且您将为 Lambda 函数付费但实际上什么都不做

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