[英]Define delayed_jobs dependencies
我使用的是delayed_job
,对于其中的一些delayed_job
,需要在当前延迟之后执行,并且延迟很小。 此延迟来自我正在查询的API的速率限制。
基本思路
这是我的工作限制:
1s 1s
A1 --------> A2 --------> A3
和
1s 1s
B1 --------> B2 --------> B3
最后,我希望此过程花费约2秒钟的时间,例如:
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
方法。 另外,我真的想像这不是使用delay_job需要依赖项的第一个用例,因此,我敢肯定有一种我找不到的更好方法。
任何想法将不胜感激!
我根本不清楚您要做什么,但在大多数情况下(对我而言,这是一个很好的通用模式)(数百万次,但有一些例外)...
收到Webhook呼叫后,创建作业(如果尚未看到该Webhook呼叫),并尽快返回200状态。 这让Shopify感到高兴,并阻止他们再次向您发送相同的提示。
MonkeyPatch ActiveResource可以检查您应用程序中的左侧信用标头编号,以便在左侧呼叫为零时轻松进入500毫秒等待状态。 符咒效果... 2 /秒限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.