Skip to content

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 查看进程启动情况。

基于 MIT 许可发布