首页 > 解决方案 > Cron vs 排队任务

问题描述

我的应用程序有一个带有execution_datetime属性的Order模型。我想发送一些不同的通知。例如

上述时序不严格,可以近似;轻微的偏差是可以接受的。此外,execution_datetime可以同时改变......

我不确定是否为此使用 cron 或排队任务。我个人的一些想法:

克朗:

排队的任务:

我期待您的建议。

标签: laravelcronscheduled-tasks

解决方案


好问题!我对这个讨论很感兴趣。让我用我个人经历的一个场景来插话。

在我的应用程序中,我有一个Listing模型,它们有一个promotion_ends_at列。显然,上市促销有时会在未来结束。

所以,就像你也提到的,有两种方法可以做到这一点。

  1. 创建列表后,我可以排队等待将来在列表中结束促销的工作)。那份工作的延迟将是促销必须结束的时间(那可能是我几个月之后)。
  2. 我还可以有一个定期运行的 cron 作业来管理他们的促销活动应在特定日期结束的列表。

我们将SQS其用作队列服务,由于最长延迟SQS为 15 分钟,因此选项 1 不可行。然后,我们搬到了 Redis,在那里我们可以轻松地将延迟的作业排入队列。

但是,就像您所说的那样,该promotion_ends_at列可能会在此期间更新。因此,要么,您必须跟踪作业以使其出队,或者您可以重新检查作业在即将执行时是否仍应运行。

例如,您可以fresh()建模并检查您的条件是否仍然有效。fresh就我而言,我会Listing检查是否promotion_ends_at过去。然而,这意味着我们将有很多陈旧的工作可能无论如何都会被丢弃

我们最终选择了一个简单的 cron 作业,它可以在需要运行的那一天大规模安排作业。我还认为运行延迟的作业是一种业务逻辑,也许队列不应该对将来运行延迟太多的作业负责。


推荐阅读