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