diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f080a8c9..ac4856181 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - [#235](https://github.com/hyperf-cloud/hyperf/pull/235) Added default exception handler for `grpc-server` and optimized code. - [#240](https://github.com/hyperf-cloud/hyperf/pull/240) Fixed OnPipeMessage event will be dispatch by another listener. +- [#257](https://github.com/hyperf-cloud/hyperf/pull/257) Fixed cannot get the internal ip in some special environment. # v1.0.5 - 2019-07-07 diff --git a/doc/zh/json-rpc.md b/doc/zh/json-rpc.md index d847e2d1d..ee66a1893 100644 --- a/doc/zh/json-rpc.md +++ b/doc/zh/json-rpc.md @@ -39,6 +39,7 @@ namespace App\JsonRpc; use Hyperf\RpcServer\Annotation\RpcService; /** + * 注意,如希望通过服务中心来管理服务,需在注解内增加 publishTo 属性 * @RpcService(name="CalculatorService", protocol="jsonrpc-http", server="jsonrpc-http") */ class CalculatorService implements CalculatorServiceInterface @@ -131,11 +132,11 @@ return [ 配置完成后,在启动服务时,Hyperf 会自动地将 `@RpcService` 定义了 `publishTo` 属性为 `consul` 的服务注册到服务中心去。 -> 目前仅支持 `jsonrpc-http` 协议发布到服务中心去,其它协议的健康检查尚未实现 +> 目前仅支持 `jsonrpc` 和 `jsonrpc-http` 协议发布到服务中心去,其它协议尚未实现服务注册 ## 定义服务消费者 -一个 `服务消费者(ServiceConsumer)` 可以理解为就是一个客户端类,但在 Hyperf 里您无需处理连接和请求相关的事情,只需要定义一个类及相关属性即可。(v1.1会提供动态代理实现的客户端,使之更加简单便捷) +一个 `服务消费者(ServiceConsumer)` 可以理解为就是一个客户端类,但在 Hyperf 里您无需处理连接和请求相关的事情,只需要定义一个类及相关属性即可。(后续版本迭代会提供动态代理实现的客户端,使之更加简单便捷) ```php [ - App\JsonRpc\CalculatorServiceInterface::class => App\JsonRpc\CalculatorService::class, + App\JsonRpc\CalculatorServiceInterface::class => App\JsonRpc\CalculatorServiceConsumer::class, ], ]; ``` diff --git a/doc/zh/service-register.md b/doc/zh/service-register.md index bf1043b9a..6fdbd4c9c 100644 --- a/doc/zh/service-register.md +++ b/doc/zh/service-register.md @@ -39,4 +39,4 @@ class CalculatorService implements CalculatorServiceInterface `server` 属性为绑定该服务类发布所要承载的 `Server`,默认值为 `jsonrpc-http`,该属性对应 `config/autoload/server.php` 文件内 `servers` 下所对应的 `name`,这里也就意味着我们需要定义一个对应的 `Server`,我们下一章节具体阐述这里应该怎样去处理; `publishTo` 属性为定义该服务所要发布的服务中心,目前仅支持 `consul` 或为空,为空时代表不发布该服务到服务中心去,但也就意味着您需要手动处理服务发现的问题,当值为 `consul` 时需要对应配置好 [hyperf/consul](./consul.md) 组件的相关配置,要使用此功能需安装 [hyperf/service-governance](https://github.com/hyperf-cloud/service-governance) 组件; -> 使用 `@RpcService` 注解需 use Hyperf\RpcServer\Annotation\RpcService; 命名空间。 +> 使用 `@RpcService` 注解需 `use Hyperf\RpcServer\Annotation\RpcService;` 命名空间。 diff --git a/src/service-governance/src/Listener/RegisterServiceListener.php b/src/service-governance/src/Listener/RegisterServiceListener.php index 666a60518..f03bb911a 100644 --- a/src/service-governance/src/Listener/RegisterServiceListener.php +++ b/src/service-governance/src/Listener/RegisterServiceListener.php @@ -222,6 +222,14 @@ class RegisterServiceListener implements ListenerInterface private function getInternalIp(): string { - return gethostbyname(gethostname()); + $ips = swoole_get_local_ip(); + if (is_array($ips)) { + return current($ips); + } + $ip = gethostbyname(gethostname()); + if (is_string($ip)) { + return $ip; + } + throw new \RuntimeException('Can not get the internal IP.'); } }