SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready.
原因一
BusinessWorker 和 Gateway 之间的 socket 链接没有建立,Gateway 向 BusinessWorker 发送消息失败。
出现这个问题的原因一般是 start_gateway.php 和 start_businessworker.php 中的 registerAddress
设置错误或者设置的不一致。
Gateway 和 BusinessWorker 启动后会根据 registerAddress
设置的地址 (Register 服务地址) 注册自己,
当 start_gateway.php 和 start_businessworker.php 中的 registerAddress
设置错误或者不一致时,
会导致 Gateway 和 BusinessWorker 无法通讯。
start_gateway.php 和 start_businessworker.php 中的 registerAddress
地址格式为 Register的IP:端口号
,
其中端口号为 start_register.php 中的监听端口 (假设是 1238),
单机部署时,Register 服务为本机 ip 127.0.0.1,则 start_gateway.php 和 start_businessworker.php 中的 registerAddress
统一为 '127.0.0.1:1238'
。
分布式 (集群) 部署时,IP 为实际 Register 服务部署的 IP (分布式部署时只需要部署一台 Register 服务即可,假设是 192.168.1.100),
则 start_gateway.php 和 start_businessworker.php 中的 registerAddress
统一为 '192.168.1.100:1238'
。
原因二
业务设置了 business_worker->onWorkerStart 或者 Events::onWorkerStart 回调,并且回调里有死循环或者长时间阻塞的代码,致使框架无法执行 businessWorker 与 gateway 建立连接逻辑,导致报错。
将死循环或者长时间阻塞的代码去掉即可恢复。
原因三
没有启动 BusinessWorker 进程或者 Register 进程。
原因四
服务器启动了多个 GatewayWorker,并且多个 GatewayWorker 使用了相同的端口导致冲突。利用命令 ps auxf
查看进程启动情况。