首页 > 解决方案 > 如何将排队的作业与 Laravel 中的特定用户相关联?

问题描述

我已经建立了一个基于 Laravel 的系统,用户可以在其中开始重复多次的“任务”,每次重复之间都有延迟。我通过使用amount参数对作业进行排队来实现这一点,然后递归地排队另一个作业,直到计数结束。

例如,我以 3 次重复开始我的任务:

  1. 作业以amount3 的参数排队。它运行,数量减少到 2。相同的作业再次排队,指定延迟 5 秒。
  2. 当作业再次运行时,该过程以amount1 的值重复。
  3. 最后一个作业执行,现在amount已经到了0,不再排队,任务已经完成。

这按预期工作,但我需要知道用户当前是否有任何正在处理的任务。我需要能够执行以下操作:

  1. 检查特定队列是否有由特定用户启动的任何作业。
  2. 检查为该amount作业设置的值。

我正在将database驱动程序用于名为tasks. 有什么现有的方法可以在这里实现我的目标吗?

谢谢!

标签: laravellaravel-5queue

解决方案


您不应该使用延迟来一遍又一遍地对同一作业的多次重复进行排队。该功能适用​​于重试失败的网络请求。如果计数过高,一次将作业保留在队列中多个小时可能会导致队列出现内存问题。

我建议您使用该php artisan schedule:run功能每 1-5 分钟运行一次命令,以检查数据库是否该运行用户的作业。如果是这样,请启动该工作并将状态标志添加到用户表(或您想要跟踪这些事情的任何表)。完成后,您将同一行标记为已完成,并等待 cron 下次运行以再次执行此操作。


推荐阅读