当前处理订单架构是这样的:
用户下单,产生队列
利用workerman的定时任务监控队列(40个进程 每秒执行一次)
定时任务里处理订单逻辑完成下单,向app发送通知
但是定时任务一直不稳定
WorkerMan 提供了 php start status
命令来查看当前程序的状态
通过status
发现处理订单的队列任务不在列表中,也就是说业务逻辑中有阻塞的情况。
开启一个进程打断点来排除问题。
发现本来每秒一次的任务却3秒才完成一次请求,而且断点在获取队列任务之后,那么问题一定是出现在获取队列任务的时候了。
原来getQueueMessage
方法在接收消息时设置了两秒的延迟时间
一次请求需要两秒等待,而定时器每一秒就需要启动一个新的任务,也就是说前面的任务还没有进行完,后面的任务已经在排队了,这样就导致了阻塞。
去掉两秒等待在看status
果然可以了
stop
的时候也没有exit with status 9
的错误了
网友评论