mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-02 11:48:08 +08:00
Merge pull request #257 from huangzhhui/master
Optimized the getInternalIp method
This commit is contained in:
commit
dde56dff37
@ -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
|
||||
|
||||
|
@ -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,
|
||||
],
|
||||
];
|
||||
```
|
||||
|
@ -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;` 命名空间。
|
||||
|
@ -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.');
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user