队列消费者
G3-Web 提供了完整的队列消费者解决方案,支持多种运行模式和部署方式。无论是开发环境的简单测试,还是生产环境的高可用部署,都能找到合适的消费者配置。
概述
G3-Web 队列消费者是处理异步任务的核心组件,支持以下运行模式:
- CLI 模式 - 命令行直接运行,适合开发和测试
- Cron 模式 - WordPress Cron 自动调度,适合中小型网站
- Supervisor 模式 - 进程管理器监控,适合中等规模部署
- systemd 模式 - 系统服务管理,适合企业级部署
文件结构
-
bin/
-
queue-worker.php
-
queue-manager.php
-
start-worker.sh
-
supervisor/
-
queue-consumer/
-
g3-queue-worker.conf // Supervisor 配置文件
-
install.sh // 自动安装脚本
-
README.md
-
-
-
systemd/
-
queue-consumer/
-
g3-queue-worker@.service // systemd 模板服务
-
install.sh // 自动安装脚本
-
manage.sh // 管理脚本
-
README.md
-
-
-
核心脚本
1. queue-worker.php
队列工作器是消费者的核心,负责从队列中取出任务并执行。
基本用法
Shell# 基本运行php queue-worker.php# 守护进程模式php queue-worker.php --daemon --verbose# 处理完队列后停止php queue-worker.php --stop-when-empty --verbose# 指定队列和参数php queue-worker.php --queue=high --sleep=1 --tries=5 --verbose
命令行选项
| 选项 | 默认值 | 说明 |
|---|---|---|
--queue=default |
default | 指定队列名称 |
--sleep=3 |
3 | 空队列时的休眠时间(秒) |
--tries=3 |
3 | 任务最大重试次数 |
--timeout=60 |
60 | 任务执行超时时间(秒) |
--daemon |
false | 以守护进程模式运行 |
--stop-when-empty |
false | 队列为空时停止 |
--verbose |
false | 显示详细输出 |
特性
- 自动重试 - 任务失败时自动重试,支持指数退避
- 优雅关闭 - 支持信号处理,优雅关闭进程
- 内存管理 - 智能内存管理,避免内存泄漏
- 错误处理 - 完善的错误处理和日志记录
- 自动清理 - 定期清理过期和已完成的任务
2. queue-manager.php
队列管理器提供队列状态查看、清理等管理功能。
基本用法
Shell# 查看队列状态php queue-manager.php status# 查看驱动信息php queue-manager.php info# 清空队列php queue-manager.php clear --queue=default# 清理过期任务php queue-manager.php cleanup
支持的动作
| 动作 | 说明 |
|---|---|
status |
查看队列状态和统计信息 |
info |
查看队列驱动配置信息 |
clear |
清空指定队列的所有任务 |
cleanup |
清理过期和旧任务 |
3. start-worker.sh
启动脚本,支持多种运行模式。
基本用法
Shell# 守护进程模式(默认)./start-worker.sh daemon --queue=default --verbose# 单次运行模式./start-worker.sh single --stop-when-empty# 测试模式./start-worker.sh test
运行模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
daemon |
守护进程模式,持续运行 | 生产环境 |
single |
单次运行,处理完停止 | 定时任务 |
test |
测试模式,快速处理 | 开发测试 |
部署方案
1. 开发环境 - CLI 模式
适合开发和测试环境,简单直接。
Shell# 进入 bin 目录cd /path/to/wp-content/plugins/G3-Web/bin# 直接运行工作器php queue-worker.php --stop-when-empty --verbose# 或使用启动脚本./start-worker.sh single --verbose
优点:
- 简单易用,无需额外配置
- 适合调试和测试
- 可以随时启动和停止
缺点:
- 需要手动管理
- 不适合长期运行
- 无自动重启机制
2. 小型网站 - Cron 模式
使用 WordPress Cron 自动调度,适合中小型网站。
PHP// 在队列配置中启用 cron 消费者$config = [ 'consumer' => 'cron', 'cron' => [ 'interval_minutes' => 1, // 每分钟执行一次 'jobs_per_run' => 10, // 每次处理10个任务 'auto_cleanup' => true, // 自动清理 ]];
优点:
- 无需额外配置
- 与 WordPress 完美集成
- 自动调度执行
缺点:
- 依赖 WordPress Cron
- 处理能力有限
- 不适合高并发场景
3. 中等规模 - Supervisor 模式
使用 Supervisor 进程管理器,适合中等规模的部署。
Shell# 自动安装cd /path/to/wp-content/plugins/G3-Web/bin/supervisor/queue-consumersudo ./install.sh# 手动管理sudo g3-queue-manage start # 启动所有队列sudo g3-queue-manage status # 查看状态sudo g3-queue-manage logs # 查看日志
配置特点:
- 双队列支持:default(2进程)+ high(1进程)
- 自动重启:进程异常时自动重启
- 日志管理:自动日志轮转
- Web界面:可选的Web管理界面
优点:
- 进程监控和自动重启
- 支持多进程并发
- 完善的日志管理
- 相对简单的配置
缺点:
- 需要安装额外软件
- 资源控制能力有限
- 安全隔离较弱
4. 企业级 - systemd 模式
使用 systemd 系统服务,适合企业级部署。
Shell# 自动安装cd /path/to/wp-content/plugins/G3-Web/bin/systemd/queue-consumersudo ./install.sh# 使用管理脚本sudo ./manage.sh enable default # 启用默认队列sudo ./manage.sh status # 查看状态sudo ./manage.sh health # 健康检查
配置特点:
- 模板服务:一个服务文件支持多队列
- 企业级安全:完整的安全沙箱
- 资源控制:精确的CPU和内存限制
- 原生集成:与系统完美集成
优点:
- 企业级安全和资源控制
- 与系统深度集成
- 强大的依赖管理
- 高可靠性
缺点:
- 配置相对复杂
- 需要 systemd 支持
- 学习曲线较陡
性能对比
| 特性 | CLI | Cron | Supervisor | systemd |
|---|---|---|---|---|
| 易用性 | ☆☆☆☆☆ | ☆☆☆☆ | ☆☆☆ | ☆☆ |
| 可靠性 | ☆☆ | ☆☆☆ | ☆☆☆☆ | ☆☆☆☆☆ |
| 性能 | ☆☆☆ | ☆☆ | ☆☆☆☆ | ☆☆☆☆☆ |
| 安全性 | ☆☆ | ☆☆☆ | ☆☆☆ | ☆☆☆☆☆ |
| 监控 | ☆ | ☆☆ | ☆☆☆☆ | ☆☆☆☆☆ |
| 扩展性 | ☆☆ | ☆☆ | ☆☆☆☆ | ☆☆☆☆☆ |
选择指南
开发环境
Shell# 推荐:CLI 模式php queue-worker.php --stop-when-empty --verbose
个人博客/小型网站
PHP// 推荐:Cron 模式'consumer' => 'cron'
中小企业网站
Shell# 推荐:Supervisor 模式sudo ./supervisor/queue-consumer/install.sh
大型企业/高并发
Shell# 推荐:systemd 模式sudo ./systemd/queue-consumer/install.sh
监控和调试
日志查看
CLI 模式
Shell# 直接在终端查看输出php queue-worker.php --verbose
Cron 模式
Shell# 查看 WordPress 错误日志tail -f /path/to/wp-content/debug.log
Supervisor 模式
Shell# 查看 Supervisor 日志sudo g3-queue-manage logstail -f /var/log/supervisor/g3-queue-default.log
systemd 模式
Shell# 查看 systemd 日志./manage.sh logs defaultjournalctl -u g3-queue-worker@default.service -f
性能监控
队列状态
Shell# 查看队列状态php queue-manager.php status# 查看驱动信息php queue-manager.php info
系统资源
Shell# 查看进程资源使用ps aux | grep queue-worker# 查看系统负载top -p $(pgrep -f queue-worker)
健康检查
Supervisor 模式
Shell# 查看进程状态sudo supervisorctl status# 重启异常进程sudo supervisorctl restart g3-queue-workers:*
systemd 模式
Shell# 健康检查./manage.sh health# 查看服务状态systemctl status g3-queue-worker@default.service
安全配置
用户权限
Shell# 确保以正确用户运行sudo chown www-data:www-data /path/to/queue-worker.phpsudo chmod +x /path/to/queue-worker.php
文件权限
Shell# 设置适当的文件权限find /path/to/G3-Web/bin -name "*.php" -exec chmod 644 {} \;find /path/to/G3-Web/bin -name "*.sh" -exec chmod 755 {} \;
网络安全
- 确保数据库连接安全
- 限制 Redis 访问权限
- 使用防火墙保护服务端口
故障排除
常见问题
1. 工作器无法启动
Shell# 检查 PHP 路径which php# 检查文件权限ls -la queue-worker.php# 检查 WordPress 配置php -r "require_once '/path/to/wp-config.php'; echo 'OK';"
2. 数据库连接失败
Shell# 检查数据库服务systemctl status mysql# 测试数据库连接mysql -u username -p -h host database_name
3. Redis 连接失败
Shell# 检查 Redis 服务systemctl status redis# 测试 Redis 连接redis-cli ping
4. 内存不足
Shell# 检查内存使用free -h# 调整 PHP 内存限制php -d memory_limit=512M queue-worker.php
调试技巧
启用详细日志
Shell# CLI 模式php queue-worker.php --verbose# 修改 PHP 错误报告php -d error_reporting=E_ALL queue-worker.php
单步调试
Shell# 处理单个任务后停止php queue-worker.php --stop-when-empty --verbose --tries=1
检查队列状态
Shell# 查看队列详细信息php queue-manager.php status --queue=default
性能优化
配置优化
调整进程数量
Shell# Supervisor: 编辑配置文件sudo vim /etc/supervisor/conf.d/g3-queue-worker.conf# 修改 numprocs 参数# systemd: 启动多个实例sudo systemctl start g3-queue-worker@default.servicesudo systemctl start g3-queue-worker@high.service
调整资源限制
Shell# 设置内存限制php -d memory_limit=1G queue-worker.php# 设置执行时间限制php -d max_execution_time=300 queue-worker.php
队列优化
使用多队列
PHP// 高优先级任务Queue::driver()->push('UrgentJob', $data, 0, 'high');// 普通任务Queue::driver()->push('NormalJob', $data, 0, 'default');// 低优先级任务Queue::driver()->push('LowPriorityJob', $data, 0, 'low');
批量处理
PHP// 批量推送任务for ($i = 0; $i < 100; $i++) { Queue::driver()->push('BatchJob', ['item' => $i], 0, 'batch');}
升级和维护
定期维护
清理过期任务
Shell# 手动清理php queue-manager.php cleanup# 定时清理(添加到 crontab)0 2 * * * /usr/bin/php /path/to/queue-manager.php cleanup
日志轮转
Shell# Supervisor 自动轮转# systemd 使用 journald 自动管理# 手动清理日志find /var/log -name "*g3-queue*" -mtime +30 -delete
版本升级
停止服务
Shell# Supervisorsudo g3-queue-manage stop# systemdsudo ./manage.sh stop
更新代码
Shell# 更新 G3 插件代码# 重新加载配置
重启服务
Shell# Supervisorsudo g3-queue-manage start# systemdsudo ./manage.sh start
最佳实践
1. 环境隔离
- 开发环境使用 CLI 模式
- 测试环境使用 Cron 模式
- 生产环境使用 Supervisor 或 systemd
2. 监控告警
- 设置进程监控
- 配置错误日志告警
- 监控队列积压情况
3. 资源管理
- 合理设置内存限制
- 控制并发进程数量
- 定期清理过期任务
4. 安全防护
- 使用专用用户运行
- 限制文件系统访问
- 加密敏感配置信息