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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WorkerMan 阻塞导致队列服务不稳定的问题相关的知识,希望对你有一定的参考价值。

参考技术A WorkerMan 提供了 php start status 命令来查看当前程序的状态

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

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

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

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

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

果然可以了

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

以上是关于WorkerMan 阻塞导致队列服务不稳定的问题的主要内容,如果未能解决你的问题,请参考以下文章

一旦队列填满,WebSocket 异步发送可能会导致发送阻塞

简单了解几种阻塞队列

阻塞的本质——等待队列

初探消息队列

并发新构件之PriorityBlockingQueue:优先阻塞队列

webman 体验及性能压测