我的应用程序具有带有 execution_datetime 属性的 Order 模型。我想发送一些不同的通知。例如
上述时间并不严格,可以近似;轻微的偏差是可以接受的。此外,执行日期时间可以同时更改...
我不确定是使用cron还是排队的任务。我的一些想法:
Cron:
排队的任务:
我期待您的建议。
答案 0 :(得分:0)
好问题!我对这次讨论很感兴趣,让我从我的亲身经历中了解一个场景。
在我的应用程序中,我有一个Listing
模型,并且他们有一个promotion_ends_at
列。显然,上市促销有时会在将来结束。
因此,就像您也提到的那样,有两种方法可以做到这一点。
我们将SQS
用作队列服务,并且由于SQS
的最大延迟为15分钟,因此选项1不可行。然后,我们搬到Redis,在那里我们可以轻松地将延迟的工作排队很长时间。
但是,就像您也说过的那样,promotion_ends_at
列可以在此期间进行更新。因此,要么必须跟踪该作业以使其出队,要么可以重新检查该作业在要执行时是否仍应运行。
例如,您可以fresh()
模型并检查您的条件是否仍然有效。就我而言,我会fresh
Listing
,并检查promotion_ends_at
是否过去。但是,这意味着我们将有很多过时的工作,无论如何都可能被丢弃。
我们最终进行了一个简单的cron作业,该作业在需要运行的那一天进行大量调度。我还认为运行延迟的作业是一种业务逻辑,也许队列不应对未来延迟太多的作业负责。