速率限制请求和 Amazon SQS

AIn*_*tel 7 amazon-ec2 rate-limiting amazon-sqs amazon-web-services

我有一个关于如何减慢我的 api 请求的问题。对于我正在使用的特定第三方 API,我可以每 2 秒发出 3 个请求。如果我超过那个数字,我会返回status code 429一个等待时间(以毫秒为单位)。

这个 api 经常被调用,是我自己的服务器收到不受速率限制的传入请求的直接结果。

由于我不需要同步处理第三方 api 请求,我决定将工作卸载到 AWS 上的弹性 beantalk 工作框,默认情况下从 Amazon SQS 读取。

因此,如果从第三方 api 返回状态代码 429,我的工作人员会将 SQS 消息扔回队列。当到达等待时间时,这不可避免地使 api 调用工作。然而,这似乎是一个糟糕的解决方案

有什么方法可以告诉工作机上的守护进程将消息留在队列中等待分配的等待时间?或者我可以设置守护进程从队列中读取的速率吗?我正在寻找一种正确的方法(特定于实现)来使用 AWS 上的工作线程和队列进行速率限制。十分感谢你的帮助!

编辑:我会假设有可以在 AWS 上修改的配置来完成我的要求,但无论哪种方式,我都在为我描述的设置寻找特定的解决方案。我不太确定如何修改或控制弹性豆茎工作箱上的守护进程。

ket*_*iya 2

据我了解,您有很多调用第三方服务的触发器,并且您需要对 API 调用进行速率限制。

最好的方法是限制从 SQS 读取的守护进程的速率。根据编写守护程序所用的语言,您应该能够轻松找到可以重用的速率限制器库。例如,Java 和 Python分别在此处此处拥有经过良好测试的库。

请记住,这些库将允许每个工作线程每秒 X 个请求。如果您运行一个守护进程,则 X 将是 1.5,适合您的用例。如果您有两个守护进程(例如,两台不同的机器上各有一个),X 应为 0.75

  • 我不认为我需要任何编码方面的帮助,我也不认为需要太多编码(看看我的编辑)。我的问题是,拥有我所描述的设置(AWS 上的标准设置:默认情况下连接到 sqs 队列的弹性 beanstalk 工作选项)的人会做什么来实现速率限制。上面的答案描述了我想要的。但我知道我想要什么,我在问题中写下了这一点。我正在寻找的是如何实施或合并我在前 4 段中描述的设置的解决方案。这就是标题、标签和问题如此多地描述 AWS 的原因。 (3认同)