WorkerMan 阻塞导致队列服务不稳定的问题

2017-10-25  本文已影响480人  php_johson

当前处理订单架构是这样的:
用户下单,产生队列
利用workerman的定时任务监控队列(40个进程 每秒执行一次)
定时任务里处理订单逻辑完成下单,向app发送通知
但是定时任务一直不稳定

WorkerMan 提供了 php start status 命令来查看当前程序的状态

通过status 发现处理订单的队列任务不在列表中,也就是说业务逻辑中有阻塞的情况。

开启一个进程打断点来排除问题。

发现本来每秒一次的任务却3秒才完成一次请求,而且断点在获取队列任务之后,那么问题一定是出现在获取队列任务的时候了。

原来getQueueMessage方法在接收消息时设置了两秒的延迟时间

一次请求需要两秒等待,而定时器每一秒就需要启动一个新的任务,也就是说前面的任务还没有进行完,后面的任务已经在排队了,这样就导致了阻塞。
去掉两秒等待在看status

果然可以了

stop的时候也没有exit with status 9的错误了

上一篇下一篇

猜你喜欢

热点阅读