SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready.
原因一
BusinessWorker和Gateway之間的socket鏈接沒有建立,Gateway向BusinessWorker發(fā)送消息失敗。
出現(xiàn)這個問題的原因一般是start_gateway.php和start_businessworker.php中的registerAddress
設(shè)置錯誤或者設(shè)置的不一致。
Gateway和BusinessWorker啟動后會根據(jù)registerAddress
設(shè)置的地址(Register服務(wù)地址)注冊自己,
當(dāng)start_gateway.php和start_businessworker.php中的registerAddress
設(shè)置錯誤或者不一致時,
會導(dǎo)致Gateway和BusinessWorker無法通訊。
start_gateway.php和start_businessworker.php中的registerAddress
地址格式為Register的IP:端口號
,
其中端口號為start_register.php中的監(jiān)聽端口(假設(shè)是1238),
單機(jī)部署時,Register服務(wù)為本機(jī)ip 127.0.0.1,則start_gateway.php和start_businessworker.php中的registerAddress
統(tǒng)一為'127.0.0.1:1238'
。
分布式(集群)部署時,IP為實際Register服務(wù)部署的IP(分布式部署時只需要部署一臺Register服務(wù)即可,假設(shè)是192.168.1.100),
則start_gateway.php和start_businessworker.php中的registerAddress
統(tǒng)一為'192.168.1.100:1238'
。
原因二
業(yè)務(wù)設(shè)置了business_worker->onWorkerStart 或者 Events::onWorkerStart 回調(diào),并且回調(diào)里有死循環(huán)或者長時間阻塞的代碼,致使框架無法執(zhí)行businessWorker與gateway建立連接邏輯,導(dǎo)致報錯。
將死循環(huán)或者長時間阻塞的代碼去掉即可恢復(fù)。
原因三
沒有啟動BusinessWorker進(jìn)程或者Register進(jìn)程。
原因四
服務(wù)器啟動了多個GatewayWorker,并且多個GatewayWorker使用了相同的端口導(dǎo)致沖突。利用命令 ps auxf
查看進(jìn)程啟動情況。