我使用的是限制使用的API,假设:每秒不超过10次通话,每天不超过5000次通话。
我在beanstalkd队列进程作业中处理这些调用。考虑到API的限制,如何限制此作业的处理。
答案 0 :(得分:2)
当您使用Beanstalkd时,您可以让管暂停一段时间。
当您预约某个职位,并且您知道该呼叫期间API调用失败时,您可以暂停X seconds
的管。
您可以通过API响应找出暂停电子管所需的时间(通常它们会被锁定,直到Time X
为止),或者在接下来的60秒内以自适应状态启动,例如暂停/随时随地减少。
如果您知道在将作业放入队列之前可以延迟或分散,您还可以为作业添加延迟,因此不会立即执行,这样您就可以将作业分配到时间。
的精彩帖子答案 1 :(得分:0)
如果所有工作人员共享持久状态,他们可以更新共享状态和集体实施速率限制。
如果唯一的共享可写状态是队列本身,则可以为速率限制作业创建票证管,并使用速率限制管理器插入票证(权限单)来控制作业运行的时间。需要改变工人,需要一种方法来超时未使用的门票,但应该是可行的。
编辑:故障单中的“有效直到”时间戳可能会为每秒限制执行此操作。每日限制可能需要一个反馈管,让速率限制管理器知道实际使用情况(实施滚动24小时窗口,而不是5000全部在午夜重置)