Laravel 排队作业执行有延迟

Laravel Queued job execution with delay

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

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

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

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

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

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

麻烦的是,无论我等多久,作业都不会执行。我尝试使用 telescope,它一直显示 pending 状态。请帮我弄清楚为什么会这样。 谢谢!

  1. 首先你必须在 .env 文件中设置队列驱动程序不是 sync

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

  1. then create a queue

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

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

或开发中具有倾听意识的工作者:

php artisan queue:listen