我正在使用delayed_job
s,因为其中一些具有需要在当前版本之后执行且具有小延迟的依赖项。这种延迟来自我正在查询的API的速率限制。
基本理念
这是我的工作限制:
1s 1s
A1 --------> A2 --------> A3
和
1s 1s
B1 --------> B2 --------> B3
最后,我希望这个过程需要~2s,例如:
1s 1s
A1 -> B1 -----> B2 -> A2 ------> A3 -> B3
或
1s 1s
A1 -> B1 -----> A2 -> B2 ------> A3 -> B3
或任何尊重我的第一个约束的顺序,但具有依赖性和等待。
更多背景
我目前正在为Shopify构建一个应用程序。 Shopify的应用程序的速率限制为每个商店2个API调用/秒
但是来自shopify的webhooks给我的工作要做的事情可能是每个商店每秒超过2个,所以我需要用工作来处理它们。
然后每个作业实际上向他们的API发送两个请求。
考虑方法
我可以使用第二个队列并使用after
挂钩来获取要为商店执行的下一个作业,并使用run_at: 1.seconds.from_now
将其添加到作业表中。但是,我并不喜欢这个想法,因为我必须在表中存储perform
个参数,而不是只调用perform_later
方法。另外,我真的想象这不是第一个使用delayed_job需要依赖的用例,所以我确信有一个更好的方法,我找不到。
真的很感激任何想法!
答案 0 :(得分:1)
我一点也不清楚你想要做什么,但是一个很好的共同模式在我的大部分时间都有效(数百万次,除了少数例外)......
当您收到webhook电话时,创建作业(如果您还没有看过该webhook电话),并尽快返回200状态。这让Shopify很高兴并阻止他们再次向你发送相同的钩子。
MonkeyPatch ActiveResource用于检查应用中的信用左头号码,这样如果剩下的呼叫为零,您可以轻松进入500毫秒等待。适用于2 /秒限制的魅力......