使用workerman作為rabbitmq的守護進程,開了10個消費進程。
代碼中mysql用到事務處理,實際使用中發(fā)現(xiàn)會發(fā)生死鎖問題?導致業(yè)務代碼無法正常運行。應該是多個進程訪問事務導致的。
我目前想到的解決方案:在處理代碼之前用redis標記是否有進程在處理,如果有則不往下執(zhí)行業(yè)務(并將當前任務重新推入mq比如3分鐘后再執(zhí)行)? ?處理完后解鎖。
不知道正確的姿勢是怎么樣的?使用多進程是因為rabbitmq?消費進程在單進程情況下任務一多就會出現(xiàn)?Unacked現(xiàn)象(應該是進程阻塞住了?出現(xiàn)假死現(xiàn)象),不知道是不是任務太多消費進程來不及確認導致的,所以想測試下多進程能否解決這種情況,結果又出現(xiàn)了新的坑。
(隨便吐槽下該論壇頁面停留過長?不讓發(fā)帖的BUG)