Laravel 9中Redis队列通知未入队问题排查求助
排查正式站点Redis队列无法接收通知的问题
基于你的描述,Beta站队列正常、Redis本身无问题,正式站缓存正常但通知进不了队列,下面是针对性的排查步骤:
1. 确认队列驱动与核心配置
- 检查
.env里的QUEUE_CONNECTION是否设为redis,如果是sync驱动,通知会直接执行不会进入队列,这是最常见的疏漏。 - 打开
config/queue.php,找到redis驱动的配置块,确认:
确保'redis' => [ 'driver' => 'redis', 'connection' => 'default', // 要对应database.php里的redis.default连接 'queue' => env('REDIS_QUEUE', 'default'), // 必须读取.env里的REDIS_QUEUE值 'retry_after' => 90, 'block_for' => null, ],connection指向你配置的Redis数据库(也就是database.php里的default,对应.env的REDIS_DB=2),queue参数正确读取REDIS_QUEUE=production。
2. 清除配置缓存(关键步骤)
正式环境部署后,Laravel可能缓存了旧配置,导致新的Redis参数未生效,执行以下命令:
php artisan config:clear php artisan cache:clear # 如果之前执行过config:cache,必须再执行一次更新缓存 php artisan config:cache
3. 验证Redis队列的实际生效情况
- 登录Redis命令行,切换到正式站用的数据库:
redis-cli SELECT 2 - 触发一次通知后,执行
KEYS *,查看是否出现类似mysite_production_database:queues:production的键,或者用LLEN mysite_production_database:queues:production查看队列长度是否增加。 - 如果没有任何键生成,说明代码根本没往这个Redis库写,需要进一步检查配置是否加载正确:在触发通知的代码里临时加入
dd(config('queue.connections.redis')),查看输出的connection和queue参数是否和.env一致。
4. 检查目录权限与日志
- 确认正式站点的
storage和bootstrap/cache目录有web服务器用户的写权限,权限不足可能导致队列任务无法写入或静默失败。 - 查看
storage/logs/laravel.log,搜索队列相关的报错(比如Redis连接失败、序列化错误等),很多时候静默失败都是因为日志里有报错但没注意。
5. 确认通知类的队列配置
你的通知类已经实现了ShouldQueue并使用了Queueable trait,基本没问题,但可以检查是否在类里硬编码了队列连接或名称:
// 确保没有类似这样的硬编码,覆盖了.env配置 protected $connection = 'beta_redis'; protected $queue = 'beta_queue';
如果以上步骤都排查过还是有问题,可以尝试在正式站点临时把QUEUE_CONNECTION改成sync,看通知是否能正常发送,以此判断是队列写入的问题,还是通知本身的逻辑问题。
内容的提问来源于stack exchange,提问作者deekep
相关产品推荐
相关产品推荐

