Laravel 10 在 PHP 8.1 中配置队列监听需确保 Redis 扩展启用、.env 设置 QUEUE_CONNECTION=redis、运行 queue:work 命令并配合 Supervisor 守护进程,推荐使用 phpredis 驱动及 --timeout、--tries 等参数保障稳定性。

在 PHP 8.1 中配置 Laravel 10 的队列监听,核心是确保队列驱动可用、监听命令能稳定运行,并适配新版本的语法与扩展要求。Laravel 10 默认支持 Redis、Database、Sync、Beanstalkd、SQS 等驱动,其中 Redis 是最常用且推荐用于生产环境的选项。
确认 PHP 8.1 环境与扩展已就绪
Laravel 10 要求 PHP ≥ 8.1,队列功能(尤其是 Redis 驱动)依赖 ext-redis 扩展。请检查:
- 运行
php -v确认版本为 8.1.x - 运行
php -m | grep redis确认 redis 扩展已启用(若未安装,需通过包管理器或 pecl 安装并配置extension=redis.so) - 如使用 Database 驱动,确保
database/migrations中已执行php artisan queue:table并迁移(php artisan migrate)
配置 .env 和 config/queue.php
在 .env 文件中指定队列连接方式,例如使用 Redis:
QUEUE_CONNECTION=redis REDIS_CLIENT=predis # 或 phpredis(推荐 phpredis,性能更好,需 extension=redis) REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_PASSWORD=null REDIS_DATABASE=0
若改用数据库驱动,设为:
立即学习“PHP免费学习笔记(深入)”;
QUEUE_CONNECTION=database
同时确保 config/queue.php 中对应连接配置正确(通常默认即可,无需修改)。
创建队列任务并分发
生成一个可排队的任务:
php artisan make:job SendWelcomeEmail
在 app/Jobs/SendWelcomeEmail.php 中实现 ShouldQueue 接口,并编写逻辑(如发送邮件、写日志等)。然后在控制器或服务中分发:
SendWelcomeEmail::dispatch($user)->onQueue('default');注意:Laravel 10 默认使用 default 队列;也可自定义队列名,如 onQueue('emails'),后续监听时需指定。
启动队列监听器(关键步骤)
使用 Artisan 命令启动监听:
- 基础监听(默认 default 队列):
php artisan queue:listen - 监听指定队列:
php artisan queue:listen redis --queue=emails - 设置超时与尝试次数(防卡死):
php artisan queue:listen --timeout=60 --tries=3 - 后台常驻(开发可加
--daemon,但 Laravel 10 已弃用该选项;生产环境强烈推荐用queue:work+ 进程管理器)
✅ 生产环境标准做法是使用 queue:work(更稳定、内存友好):
php artisan queue:work redis --queue=default --timeout=90 --sleep=3 --max-jobs=1000 --tries=3
配合 Supervisor、Systemd 或 Docker 等工具守护进程,避免中断。
验证与调试技巧
监听启动后,可通过以下方式确认是否生效:
- 查看终端输出:成功连接 Redis 后会显示
Processing jobs from the redis:default queue. - 触发一个队列任务(如注册用户触发欢迎邮件),观察监听器是否打印处理日志
- 使用
redis-cli查看队列内容:lrange queues:default 0 -1(Redis 驱动下) - 检查日志:
storage/logs/laravel.log,搜索Processed或异常堆栈
若报错 Class "Predis\Client" not found,说明用了 predis 但未安装:运行 composer require predis/predis;若用 phpredis,则确保 REDIS_CLIENT=phpredis 且扩展已加载。



















