我发誓我所有的服务已经注册到与start_register文件相同的ip及端口了
$register = new Register('text://0.0.0.0:1238');
但为毛要报 'Can not connect to tcp://127.0.0.1:1236这个错?
start_businessworker.php 的 $gateway->registerAddress = '127.0.0.1:1238';
start_gateway.php 的 $worker->registerAddress = '127.0.0.1:1238';
难道这两句都不起作用的吗?
使用sendToAll会触发此问题
在哪里调用的sendToAll?Gateway进程里?
在Applications\YourApp\start_timer.php 里写了一个定时任务,定时调用该文件同目录下的一个文件里的函数。在这个函数里执行了sendToAll
这个是正常的,不是bug。
一个GatewayWorker项目只有一个Register服务,GatewayWorker项目中Gateway和businessWorker都用registerAddress属性来指定当前Gateway和businessWorker链接哪个Register服务,从而表明Gateway和businessWorker属于哪个项目。
start_timer.php 使用的是Worker容器,因为Worker既不是Gateway进程也不是BusinessWorker进程,它不属于GatewayWorker项目,Worker是Gateway BusinessWorker的基类,Worker本身也没有类似registerAddress属性指定Register服务,所以无法确定start_timer.php属于哪个项目。理论上start_timer.php 里的定时器可以向任意GatewayWorker项目推送数据。Gatway::sendXXX 接口默认使用的是127.0.0.1:1236端口作为RegisterAddress,但实际上端口为1238,所以会有上面的报错。
解决方法是在start_timer.php的onWorkerStart中第一行调用
GatewayWorker\Lib\Gateway::$registerAddress = '127.0.0.1:1238';
来明确指定推送接口链接哪个GatewayWorker推送数据。