# 队列系统设置指南 ## 概述 本系统使用 Laravel 队列系统处理异步任务,包括: - 文档转换(Word/Excel/PDF 转 Markdown) - 终端配置同步 - 其他后台任务 ## 重要说明 ### 文档转换状态说明 如果看到文档转换状态一直是"等待转换"或"处理中",可能的原因: 1. **队列处理器未运行**:需要启动队列处理器来执行转换任务 2. **测试数据无实际文件**:数据库中的测试文档记录没有对应的实际文件 3. **文件路径错误**:文档文件路径配置不正确 **解决方案**: - 确保队列处理器正在运行(见下文) - 上传真实的文档文件进行测试 - 删除无效的测试数据:`php artisan tinker --execute="\App\Models\Document::where('conversion_status', 'pending')->delete();"` ## 开发环境设置 ### 方法一:使用 Supervisor(推荐用于生产环境) 1. 安装 Supervisor(macOS): ```bash brew install supervisor ``` 2. 创建配置文件 `/usr/local/etc/supervisor.d/laravel-worker.ini`: ```ini [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /path/to/your/project/artisan queue:work --sleep=3 --tries=3 --max-time=3600 autostart=true autorestart=true stopasgroup=true killasgroup=true user=your-username numprocs=1 redirect_stderr=true stdout_logfile=/path/to/your/project/storage/logs/worker.log stopwaitsecs=3600 ``` 3. 启动 Supervisor: ```bash brew services start supervisor supervisorctl reread supervisorctl update supervisorctl start laravel-worker:* ``` ### 方法二:手动运行队列处理器(开发环境) 在单独的终端窗口中运行: ```bash php artisan queue:work ``` 或者使用 `queue:listen` 命令(会自动重载代码): ```bash php artisan queue:listen ``` ### 方法三:使用 Octane + Swoole(本项目推荐) 本项目已配置 Octane + Swoole,可以同时处理 HTTP 请求和队列任务: 1. 启动 Octane 服务器: ```bash php artisan octane:start --watch ``` 2. 在另一个终端启动队列处理器: ```bash php artisan queue:work ``` 或者使用 Supervisor 配置(见方法一)。 ## 使用 Composer 脚本 项目已配置了便捷的 Composer 脚本: ### 开发模式(启动 Octane + 队列) ```bash composer run dev ``` 这会启动: - Octane HTTP 服务器(端口 8000) - 队列处理器 ### 仅启动 Octane ```bash composer run octane ``` ### 仅启动队列处理器 ```bash composer run queue ``` ## 检查队列状态 ### 查看队列中的任务 ```bash php artisan queue:work --once ``` ### 查看失败的任务 ```bash php artisan queue:failed ``` ### 重试失败的任务 ```bash php artisan queue:retry all ``` ### 清空失败的任务 ```bash php artisan queue:flush ``` ## 队列配置 队列配置文件位于 `config/queue.php`。 当前使用的队列驱动:`database` 可以在 `.env` 文件中修改: ```env QUEUE_CONNECTION=database ``` ## 常见问题 ### 1. 文档转换状态一直是"等待转换" **原因**:队列处理器没有运行。 **解决方案**: - 检查队列处理器是否在运行:`ps aux | grep "queue:work"` - 启动队列处理器:`php artisan queue:work` - 或使用 Supervisor 自动管理 ### 2. 队列任务执行失败 **排查步骤**: 1. 查看日志:`tail -f storage/logs/laravel.log` 2. 查看失败任务:`php artisan queue:failed` 3. 检查任务详情:`php artisan queue:failed-table` ### 3. 队列处理速度慢 **优化方案**: - 增加队列处理器数量(修改 Supervisor 配置中的 `numprocs`) - 使用 Redis 队列驱动(性能更好) - 调整 `--sleep` 和 `--tries` 参数 ## 生产环境部署 ### 使用 Supervisor 1. 复制配置文件到服务器 2. 修改路径和用户名 3. 启动 Supervisor: ```bash sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:* ``` ### 使用 Docker 项目已包含 Docker 配置,Supervisor 会自动启动队列处理器。 查看 `docker/supervisor/supervisord.conf` 了解详情。 ## 监控队列 ### 使用 Horizon(可选) 如果需要更强大的队列监控,可以安装 Laravel Horizon: ```bash composer require laravel/horizon php artisan horizon:install php artisan horizon ``` 访问 `/horizon` 查看队列监控面板。 ## 相关文档 - [Laravel 队列文档](https://laravel.com/docs/queues) - [Laravel Octane 文档](https://laravel.com/docs/octane) - [Supervisor 文档](http://supervisord.org/)