【问题标题】:How do I check to see if a job is in the Laravel queue?如何检查作业是否在 Laravel 队列中?
【发布时间】:2015-04-19 21:21:07
【问题描述】:

情况如下:

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

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

问题是这样的:我即将将此作业系统部署到生产环境中,但我不知道如何开始第一次运行这个东西。

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

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

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

  1. 有没有办法检查队列以查看其中有哪些作业?

  2. 有更好的方法吗?

谢谢

【问题讨论】:

标签: laravel laravel-4 queue


【解决方案1】:

当作业在 laravel 队列中时,它会保存在作业表中,以便您通过数据库查看。

【讨论】:

    【解决方案2】:

    如果保证它是队列中唯一的东西,你可以使用类似的东西:

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

    【讨论】:

      【解决方案3】:

      你可以使用 Laravel Telescope 包。

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

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

      【讨论】:

        【解决方案4】:

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

        如果您想了解更多信息,这里是完整的文档:

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

        【讨论】:

          猜你喜欢
          • 2015-10-23
          • 1970-01-01
          • 2015-06-30
          • 2018-07-15
          • 2015-04-18
          • 1970-01-01
          • 2016-09-01
          • 1970-01-01
          • 2011-12-19
          相关资源
          最近更新 更多