我的 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
您需要:
sleep
命令添加到 Lambda 函数末尾以等待所需的时间预留并发 - AWS Lambda 将确保最多可以同时运行 3 个函数。
sleep
将延迟下一个功能的开始。不幸的是,这意味着 Lambda 函数将运行更长时间,并且您将为 Lambda 函数付费但实际上什么都不做。