如何限制主题的消费率?

时间:2016-11-06 20:05:25

标签: amazon-web-services amazon-s3 amazon-sns aws-lambda

还有其他人解决了以下问题吗? 我有 SNS主题,其中包含来自 S3 的事件,并且 Lambda函数已订阅此主题,并且当有数千个事件被发送到此主题时主题,lambda函数由于超出并发限制而受到限制。
我不想请求限制增加并发执行但我会减少同时消耗主题,但我没有找到信息如何做到这一点。感谢。

1 个答案:

答案 0 :(得分:9)

关于SNS的几个选项:

1) SNS最大接收率

设置SNS Maximum Receive Rate。这将限制发送给订阅者的SNS消息,但如果您有这么多消息,它们将被丢弃,然后才能处理它们,这可能不是一个很好的选择。来自文档:

  

您可以设置Amazon SNS每秒的最大邮件数   通过设置最大接收速率发送到订阅的端点   设置。 Amazon SNS保留等待发送的消息   一个小时保留一个多小时的邮件将被丢弃。

如果您一次只收到数千个事件,请将最大接收率设置为' 100'的Lambda' default concurrent execution limit。可能值得一试。

正如@kndrk所说,此限制目前仅适用于SNS主题的HTTP / HTTPS订阅者。要解决此问题,您可以expose your lambda function via AWS API Gateway并将该端点订阅到SNS主题,而不是直接订阅lambda函数。

2)来自SQS的流程

Subscribe an SQS queue to the SNS topic并处理来自队列的消息,而不是直接来自sns主题。 SQS ReceiveMessage的单个调用一次只能处理10条消息,因此您可以更轻松地进行限制。

值得注意的是,您可以发布S3 Events directly to AWS Lambda