【问题标题】:Laravel Queued job execution with delayLaravel排队作业执行延迟
【发布时间】:2021-11-22 14:27:32
【问题描述】:

我正在使用 Laravel 排队作业来简单地以 JSON 格式创建我的表的副本,然后删除创建的文件。这是我的处理方法:

public function handle()
{
    unlink($this->file);
}

只要我在响应后立即发送文件,代码就可以正常工作:

DeleteCreatedFiles::dispatchAfterResponse(/* File path */);

但是我想在删除之前将文件保留一段时间,所以我使用了以下代码:

DeleteCreatedFiles::dispatch(/* file path */)
        ->delay(now()->addSeconds(30));

问题在于,无论我等待多久,该作业都不会执行。我尝试使用望远镜,它一直显示 pending 状态。请帮我弄清楚为什么会这样。 谢谢!

【问题讨论】:

  • 如何执行队列?
  • 通过 Job::dispatch() 方法。
  • 我直接执行了作业
  • erm.. 你的环境中的队列驱动程序是什么?
  • @Faheem-maker 我的回答对你有帮助吗?

标签: php laravel laravel-8 laravel-queue


【解决方案1】:
  1. 首先你必须将.env文件中的队列驱动设置为不是sync

因为如果您的工作被延迟,它必须排队。所以不应该使用 sync 选项

  1. then create a queue

基于队列驱动(如数据库,redis,...),你可以创建一个队列。

  1. 运行一个工人:
  • 单线程运行:
php artisan queue:work

或具有倾听意识的开发人员:

php artisan queue:listen

【讨论】:

  • 只是一个评论:在开发过程中使用php artisan queue:listen 让工人意识到变化很方便。否则,您必须在每次更改完成时重新启动工作人员
  • 感谢@Lucano。你说的对。我要把它添加到m answer
  • 所以你必须在作业执行之前启动一个队列工作者?
  • 当然,为了执行作业,应该有一个工人正在运行来处理作业
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 2012-03-29
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多