我们在 Horizon 上配置了 Redis,与缓存的连接不同。最近我们从 Laravel 10 升级到 11。之前在 Laravel 10 上安排的所有作业都没有在 Laravel 11 上运行,并陷入待处理部分。新工作进展顺利。
我们检查了新作业是否写入正确的redis,具有相同的前缀,唯一发现的差异是在delay.dumpDateProperties.timezone上。旧工作有:
"timezone":"O:21:"Carbon\CarbonTimeZone":2:{s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}"
和新的只是"timezone": "UTC"
。我们尝试直接在redis中使用HSET手动更改它,但仍然作业没有运行。
最后,地平线并没有真正提供手动运行待处理作业的方法。
任何想法将不胜感激!
经过一番挖掘发现了它。 显然,shift 删除了我们配置队列连接的queue.php 配置,因为 laravel 添加了默认连接。默认使用 .env var 来覆盖它,所以我们必须设置
REDIS_QUEUE_CONNECTION=queue
因为在我们的 database.php 中我们有
'queue' => [
'host' => env('QUEUE_REDIS_HOST', '127.0.0.1'),
'password' => env('QUEUE_REDIS_PASSWORD', null),
'port' => env('QUEUE_REDIS_PORT', 6379),
'database' => 0,
'scheme' => env('QUEUE_REDIS_SCHEME', 'tcp'),
],
在 Horizon.php 中
'use' => 'queue',
仍然未知为什么 Laravel 11 调度的作业被调度到正确的 Redis 服务器中并正确运行......