laravel - 如何将排队的作业与 Laravel 中的特定用户相关联?
问题描述
我已经建立了一个基于 Laravel 的系统,用户可以在其中开始重复多次的“任务”,每次重复之间都有延迟。我通过使用amount
参数对作业进行排队来实现这一点,然后递归地排队另一个作业,直到计数结束。
例如,我以 3 次重复开始我的任务:
- 作业以
amount
3 的参数排队。它运行,数量减少到 2。相同的作业再次排队,指定延迟 5 秒。 - 当作业再次运行时,该过程以
amount
1 的值重复。 - 最后一个作业执行,现在
amount
已经到了0,不再排队,任务已经完成。
这按预期工作,但我需要知道用户当前是否有任何正在处理的任务。我需要能够执行以下操作:
- 检查特定队列是否有由特定用户启动的任何作业。
- 检查为该
amount
作业设置的值。
我正在将database
驱动程序用于名为tasks
. 有什么现有的方法可以在这里实现我的目标吗?
谢谢!
解决方案
您不应该使用延迟来一遍又一遍地对同一作业的多次重复进行排队。该功能适用于重试失败的网络请求。如果计数过高,一次将作业保留在队列中多个小时可能会导致队列出现内存问题。
我建议您使用该php artisan schedule:run
功能每 1-5 分钟运行一次命令,以检查数据库是否该运行用户的作业。如果是这样,请启动该工作并将状态标志添加到用户表(或您想要跟踪这些事情的任何表)。完成后,您将同一行标记为已完成,并等待 cron 下次运行以再次执行此操作。
推荐阅读
- python - 为列表中的每个值创建数据框
- reactjs - 创建一个 React Button 组件,导入它并将文本添加到 Button
- javascript - getHistory 函数未定义
- javascript - 与 Microsoft 生态系统中的同事共享 .html 文件的最简单方法是什么?
- java - 如何在 Java 中为 Rabbit MQ 创建同步消费者 API 以从队列中获取消息
- android-studio - 重命名变量时出错:在 null 上调用了 getter 'units'
- python - Django:检测查询中使用了哪些模型
- blockchain - 警告:源文件中未提供 SPDX 许可证标识符
- c# - 在 C# 中包装一个包含固定大小 C 数组的结构
- r - 滞后不喜欢趋势