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 状态。请帮我弄清楚为什么会这样。
谢谢!
- 首先你必须在
.env
文件中设置队列驱动程序不是 sync
因为如果你的工作被延迟了,它就必须排队。所以不应该使用 sync 选项
基于队列驱动(如数据库,redis,...),你可以创建一个队列。
- 运行一个工人:
- 对于单线程运行:
php artisan queue:work
或开发中具有倾听意识的工作者:
php artisan queue:listen
-
对于多线程你可以使用laravel-horizon package
我正在使用 Laravel 排队作业来简单地以 JSON 格式创建我的表的副本,然后删除创建的文件。这是我的处理方法:
public function handle()
{
unlink($this->file);
}
只要我在响应后立即发送文件,代码就可以正常工作:
DeleteCreatedFiles::dispatchAfterResponse(/* File path */);
但是我想在删除之前保留文件一段时间所以我使用了这个代码:
DeleteCreatedFiles::dispatch(/* file path */)
->delay(now()->addSeconds(30));
麻烦的是,无论我等多久,作业都不会执行。我尝试使用 telescope,它一直显示 pending 状态。请帮我弄清楚为什么会这样。 谢谢!
- 首先你必须在
.env
文件中设置队列驱动程序不是sync
因为如果你的工作被延迟了,它就必须排队。所以不应该使用 sync 选项
基于队列驱动(如数据库,redis,...),你可以创建一个队列。
- 运行一个工人:
- 对于单线程运行:
php artisan queue:work
或开发中具有倾听意识的工作者:
php artisan queue:listen
对于多线程你可以使用laravel-horizon package