如何将排队的作业与Laravel中的特定用户相关联?

时间:2018-08-15 22:32:26

标签: laravel laravel-5 queue

我已经建立了一个基于Laravel的系统,用户可以开始执行“任务”,该任务重复多次,每次重复之间都有延迟。我通过使用一个amount参数对作业进行排队来完成此任务,然后将其递归地排队另外一个作业,直到计数增加为止。

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

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

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

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

我正在将database驱动程序用于名为tasks的队列。这里有没有现成的方法可以实现我的目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

您不应该使用延迟来一遍又一遍地重复同一作业的多个重复。该功能适用​​于重试失败的网络请求之类的事情。如果计数太高,一次将多个任务排在队列中可能会导致队列出现内存问题。

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