Skip to content

问题现象

系统中依赖异步队列的任务(如未支付订单超时自动取消、到期租金账单生成、微信模板消息发送、商品浏览量统计等)长时间未触发或没有执行结果。


根本原因与排查步骤

检查 Redis 连通性与队列堆积情况

  • 现象:任务能成功加入队列,但没有消费者拉取执行。
  • 测试:登录 Redis 命令行查看队列 Key 的长度(以默认队列为例):
    bash
    redis-cli
    # 查看队列待消费任务数
    LLEN queues:default
  • LLEN 数量持续增加且不减少,说明消费者监听进程未运行或已阻塞。

检查 Supervisor 队列消费者守护进程

若业务配置了独立的队列消费者,请检查 Supervisor 管理器中是否存在以下命令的守护进程:

bash
php think queue:listen --queue default
  • 确认该守护进程状态为 RUNNING(运行中)
  • 若状态异常,查看 Supervisor 日志定位启动报错。

前台命令行单步调试(最直接有效)

在服务器终端中手动以前台模式执行队列消费命令:

bash
cd /www/wwwroot/你的项目目录
sudo -u www php think queue:work --verbose
  • 触发一个业务事件(例如在手机端浏览一个商品或下一个测试订单)。
  • 观察控制台输出,若代码存在 PHP 语法错误、类不存在或数据库异常,终端会直接输出完整的错误堆栈。

修复代码后必须重启守护进程

由于常驻内存机制,修改了任何队列 Job 代码(app/jobs/)或业务 Service 逻辑后,必须重启 Supervisor 中的队列与 Swoole 守护进程

bash
supervisorctl restart all

重启后即可正常按最新逻辑消费队列任务。

承信租多门店租赁商城系统官方文档