如何检查作业是否在Laravel队列中?

时间:2015-02-18 18:20:55

标签: laravel laravel-4 queue

情况如下:

我有一个Laravel 4.2应用程序(从第三方API)检索资产。这是一个长期存在的资产(它每12-24小时仅更改一次)并且耗时(大图像文件)。我确实缓存了资产,因此影响已经或多或少地降到了最低限度,但仍然存在这样的情况:第一个在早上登录我的应用程序的人必须等待应用程序第一次加载资产。

我已经安排了一个排队的工作,每八个小时就会运行一次。这应该确保缓存中的资产始终是新鲜的。它的工作原理是在工作运行8小时后重新排队。

问题在于:我即将将这个工作系统部署到生产和销售部门。我不知道如何第一次开始运行这个东西。

理想情况下,我想要一个管理选项,我有一个按钮,上面写着“点击此处提交作业”,但我想尽可能让它变得万无一失。防止人(我不是唯一的管理员)多次提交作业。但是,要做到这一点,应用程序需要检查&查看作业是否已在队列中。我找不到以独立于实现的方式做到这一点的方法(我正在使用redis,但将来可能会改变)。

另一种选择是添加artisan命令来运行初始进程。这样我可以部署应用程序,运行工匠命令,并忘记它。

所以,回顾一下,我有两个问题:

  1. 有没有办法检查队列,看看那里有什么工作?

  2. 有更好的方法吗?

  3. 由于

3 个答案:

答案 0 :(得分:0)

如果确定它是队列中唯一的内容,则可以使用以下内容:

if (Queue::size() === 0) {
    Queue::push(...);
}

答案 1 :(得分:0)

您需要在终端中运行 php artisanqueue:listen

如果您想了解更多关于以下内容的完整文档:

https://laravel.com/docs/5.2/queues#running-the-queue-listener

答案 2 :(得分:-1)

您可以使用Laravel望远镜套件。

Laravel Telescope是Laravel框架的优雅调试助手。 Telescope提供了对进入您的应用程序的请求,异常,日志条目,数据库查询,排队的作业,邮件,通知,缓存操作,计划任务,变量转储等的深入了解。望远镜是您本地Laravel开发环境的绝佳伴侣。

(来源:https://laravel.com/docs/7.x/telescope