[英]Set custom timeout for Laravel queued command
我有一个这样的命令类。
class MyCommand extends Command {
protected $signature = 'mycommand';
}
然后通过队列Artisan::queue('mycommand');
运行它Artisan::queue('mycommand');
一个工人正在运行多个作业php artisan queue:work --timeout=120
通常,我们可以为这样的作业类设置自定义超时
class MyJob implements ShouldQueue {
public $timeout = 240; // custom timeout
}
但是如何在 Command 类中正确地实现这一点?
Artisan::queue
不适合你的原因是因为实际调度的工作是: Illuminate\\Foundation\\Console\\QueuedCommand
;
查看\\Illuminate\\Foundation\\Console\\Kernel
类上的queue
方法
相反,您应该在使用::dispatch()
方法时使用Dispatchable
特性并实现ShouldQueue
。
这是一个简单的命令:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class TestCommand extends Command implements ShouldQueue
{
use Dispatchable;
protected $signature = 'test:command';
protected $description = 'Command description';
public $timeout = 3;
public function handle()
{
$count = 0;
while (true) {
sleep(1);
dump($count++);
}
}
}
发送测试:
/** @test */ // test
public function test(){
// given
TestCommand::dispatch();
// when
// then
}
和工人的输出(使用地平线)
2021-07-27 09:55:41][f80e9030-3f04-4148-a99c-42e0ae950947] Processing: App\Console\Commands\TestCommand
0
1
[2021-07-27 09:55:44][f80e9030-3f04-4148-a99c-42e0ae950947] Failed: App\Console\Commands\TestCommand
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.