比如業(yè)務處理使用一個統(tǒng)一的class(class是在onWorkerStart創(chuàng)建的,共用)
一條消息來了,給class設置data,然后再執(zhí)行class的邏輯
如果不是按順序,那會出現(xiàn),前一個消息設置了data但邏輯還沒跑完,后一個消息來了后更改data導致前面一條數(shù)據(jù)異常
或者不同進程存在此問題,同一進程沒問題?
大神求解
一個 Worker 是一個進程。
當你的 BusinessWorker 接收到一個消息之后,只要是同步代碼一直在執(zhí)行,就不會被另一個消息的到來所打擾,直到你的 Events::onMessage 返回之后,當前的 Worker 就準備接收下一個消息了。
所以問題的關鍵在于你處理一個消息的 PHP 程序是不是完全同步執(zhí)行的。如果你用到了定時器或者異步組件(react/mysql 或者 react/redis 之類),那就不好說了,很可能異步操作還沒有執(zhí)行完,下一個消息就到來并開始處理了。