Merge pull request #257 from huangzhhui/master

Optimized the getInternalIp method
This commit is contained in:
黄朝晖 2019-07-24 02:18:44 +08:00 committed by GitHub
commit dde56dff37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 7 deletions

View File

@ -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

View File

@ -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
<?php
@ -144,7 +145,7 @@ namespace App\JsonRpc;
use Hyperf\RpcClient\AbstractServiceClient;
class CalculatorService extends AbstractServiceClient implements CalculatorServiceInterface
class CalculatorServiceConsumer extends AbstractServiceClient implements CalculatorServiceInterface
{
/**
* 定义对应服务提供者的服务名称
@ -189,12 +190,12 @@ return [
```
这样我们便可以通过 `CalculatorService` 类来实现对服务的消费了,为了让这里的关系逻辑更加的合理,还应该在 `config/dependencies.php` 内定义 `CalculatorServiceInterface``CalculatorService` 的关系,示例如下:
这样我们便可以通过 `CalculatorService` 类来实现对服务的消费了,为了让这里的关系逻辑更加的合理,还应该在 `config/dependencies.php` 内定义 `CalculatorServiceInterface``CalculatorServiceConsumer` 的关系,示例如下:
```php
return [
'dependencies' => [
App\JsonRpc\CalculatorServiceInterface::class => App\JsonRpc\CalculatorService::class,
App\JsonRpc\CalculatorServiceInterface::class => App\JsonRpc\CalculatorServiceConsumer::class,
],
];
```

View File

@ -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;` 命名空间。

View File

@ -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.');
}
}