定义delayed_jobs依赖项

时间:2015-06-18 19:31:25

标签: ruby-on-rails shopify delayed-job

我正在使用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需要依赖的用例,所以我确信有一个更好的方法,我找不到。

真的很感激任何想法!

1 个答案:

答案 0 :(得分:1)

我一点也不清楚你想要做什么,但是一个很好的共同模式在我的大部分时间都有效(数百万次,除了少数例外)......

  • 当您收到webhook电话时,创建作业(如果您还没有看过该webhook电话),并尽快返回200状态。这让Shopify很高兴并阻止他们再次向你发送相同的钩子。

  • MonkeyPatch ActiveResource用于检查应用中的信用左头号码,这样如果剩下的呼叫为零,您可以轻松进入500毫秒等待。适用于2 /秒限制的魅力......