我使用的 API 的使用受到限制,假设:每秒调用次数不超过 10 次,每天调用次数不超过 5000 次。
我正在 beanstalkd 队列进程作业中处理此调用。考虑到 API 的限制,我如何限制此作业的处理。
最佳答案
当您使用Beanstalkd时您可以让 pipe 暂停几秒钟。
当您预订作业时,并且您知道 API 调用在该调用期间失败,您可以将管道暂停 X 秒
。
您可以从 API 响应中找出暂停管道所需的时间(通常会返回您在 Time X
之前被锁定),或者从自适应的方式开始,例如在接下来的 60 秒内暂停秒,并随时增加/减少。
如果您知道可以延迟或提前分散,则在将作业放入队列之前,您还可以向作业添加延迟,这样它就不会立即执行,这样您就可以将作业分配到时间。
还有一篇关于 distributed rate limiting using redis 的精彩帖子
关于rabbitmq - 随着时间的推移限制队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752577/