當前處理訂單架構是這樣的:
用戶下單烟零,產(chǎn)生隊列
利用workerman的定時任務監(jiān)控隊列(40個進程 每秒執(zhí)行一次)
定時任務里處理訂單邏輯完成下單瘪松,向app發(fā)送通知
但是定時任務一直不穩(wěn)定
WorkerMan 提供了 php start status
命令來查看當前程序的狀態(tài)
通過status
發(fā)現(xiàn)處理訂單的隊列任務不在列表中,也就是說業(yè)務邏輯中有阻塞的情況锨阿。
開啟一個進程打斷點來排除問題宵睦。
發(fā)現(xiàn)本來每秒一次的任務卻3秒才完成一次請求,而且斷點在獲取隊列任務之后墅诡,那么問題一定是出現(xiàn)在獲取隊列任務的時候了壳嚎。
原來getQueueMessage
方法在接收消息時設置了兩秒的延遲時間
一次請求需要兩秒等待,而定時器每一秒就需要啟動一個新的任務,也就是說前面的任務還沒有進行完烟馅,后面的任務已經(jīng)在排隊了说庭,這樣就導致了阻塞。
去掉兩秒等待在看status
果然可以了
stop
的時候也沒有exit with status 9
的錯誤了