我有一个关于如何减慢 api 请求的问题。对于我点击的特定第三方 API,我可以每 2 秒发出 3 个请求。如果我超过了这个数字,我就会被退回status code 429
以及以毫秒为单位的等待时间。
这个 api 经常被调用,是我自己的服务器收到不受速率限制的传入请求的直接结果。
由于我不需要同步处理第三方 api 请求,因此我决定将工作卸载到 AWS 上的弹性 beanstalk 工作框,默认情况下从 Amazon SQS 读取。
因此,如果从第三方 api 返回状态代码 429,我的工作人员会将 SQS 消息扔回队列中。这不可避免地会使 api 调用在达到等待时间时起作用。然而,这似乎是一个糟糕的解决方案
有没有办法告诉工作盒上的守护进程将消息留在队列中等待分配的等待时间?或者我可以设置守护进程从队列中读取的速率吗?我正在寻找一种正确的方法(特定于实现)来使用 AWS 上的工作线程和队列进行速率限制。十分感谢你的帮助!
编辑:
我本以为可以在 AWS 上修改一些配置来执行我所要求的操作,但无论哪种方式,我都在为我描述的设置寻找特定的解决方案。我不太确定如何修改或控制弹性豆茎工作盒上的守护进程。
据我了解,您有很多调用第三方服务的触发器,并且您需要对 API 调用进行速率限制。
最好的方法是限制从 SQS 读取的守护进程的速率。根据编写守护程序所用的语言,您应该能够轻松找到可以重用的速率限制器库。例如,Java 和 Python 都有经过良好测试的库here https://github.com/google/guava/blob/master/guava/src/com/google/common/util/concurrent/RateLimiter.java and here https://pypi.python.org/pypi/ratelimit/1.1.0分别。
请记住,这些库将允许每个工作线程每秒 X 个请求。如果您运行一个守护进程,则 X 将是 1.5,适合您的用例。如果您有两个守护进程(例如,两台不同的机器上各有一个),X 应为 0.75
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)