我派遣工作在我的地平线队列上做一些工作。似乎相同的作业总是在 60 秒的运行时失败,对我来说这看起来像是一个超时问题:
我通过 cron 计划调度了大约 10 个工作,而这 4 个总是失败。
这是我的config/horizon.php
(只是有趣的部分):
<?php
use Illuminate\Support\Str;
return [
'waits' => [
'redis:default' => 60,
],
'memory_limit' => 512,
'defaults' => [
'my-app-queue' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 1,
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
'memory' => 512,
'tries' => 3,
'nice' => 0,
'timeout' => 300,
],
],
'environments' => [
'production' => [
'my-app-queue' => [
'maxProcesses' => 10,
],
],
'local' => [
'my-app-queue' => [
'maxProcesses' => 10,
],
],
],
];
如您所见,我设置了 300 秒的超时,但作业总是在 60 秒标记处失败。
我使用这个入口点命令在我的 docker 容器中启动 Horizon 队列处理器:php /path/to/artisan horizon
为了调试问题,我手动实例化了作业类,以查看它在哪里失败,如下所示:
$test = new DownloadBlockedIPFeed(8);
$test->handle();
exit('Done');
这似乎花费了超过 60 秒的时间,但它确实完成了。
所以我的问题是 - 你如何正确设置 laravel Horizon 的超时时间?
我正在使用 laravel 8.x 和最新版本的 Horizon 包。