问题
Hyperf官方文档推荐的服务注册组件hyperf/service-governance
默认使用类注解方式配置需要注册的服务,即一个类可以注册为一个服务,提供了json-rpc
, grpc
等集成封装,使用较为方便。但是不支持RESTful
风格的RPC服务注册,这里提供一种解决方案。
实现方式
配置文件
执行命令发布配置文件
php bin/hyperf.php vendor:publish hyperf/nacos
编辑配置文件
config/autoload/nacos.php
<?php
declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
return [
// nacos server url like https://nacos.hyperf.io, Priority is higher than host:port
// 'url' => '',
// The nacos host info
'host' => env('NACOS_ENDPOINT', '127.0.0.1'),
'port' => env('NACOS_PORT', 8848),
// The nacos account info
'username' => null,
'password' => null,
'guzzle' => [
'config' => null,
],
'service' => [
'enable' => true,
'service_name' => env('APP_NAME', 'DemoService'),
'group_name' => env('NACOS_GROUP', ''),
'namespace_id' => env('NACOS_NAMESPACE', ''),
'protect_threshold' => 0,
'instance' => [
'heartbeat' => 5,
'weight' => 10,
'auto_removed' => true, // 配置允许worker shutdown时自动删除实例
]
],
];
配置心跳
config/autoload/processes.php
<?php
return [
// 省略其他内容 ....
// 直接发送实例心跳,创建服务,注册临时实例
Hyperf\ServiceGovernanceNacos\Process\InstanceBeatProcess::class,
];
配置优雅下线
config/autoload/server.php
<?php
// 省略其他内容......
return [
// 省略其他配置内容 ....
'callbacks' => [
// ...
// 监听实例shutdown,发送shutdown事件,由
Event::ON_SHUTDOWN => [Hyperf\Framework\Bootstrap\ShutdownCallback::class, 'onShutdown'],
],
];
config/autoload/listener.php
<?php
return [
// 省略其他内容......
// 监听shutdown事件,删除服务实例
Hyperf\ServiceGovernanceNacos\Listener\OnShutdownListener::class,
];