Hyperf 框架下关于 Nacos 微服务的 php SDK
composer require zxyfaxcn/nacos
php bin/hyperf.php vendor:publish zxyfaxcn/nacos
./src
├── Config 配置的自动更新
│ ├── FetchConfigProcess.php
│ ├── OnPipeMessageListener.php
│ └── PipeMessage.php
├── ConfigProvider.php Hyperf扩展配置
├── Helper 辅助函数
│ └── func.php
├── Lib Nacos Api 封装
│ ├── AbstractNacos.php
│ ├── NacosConfig.php
│ ├── NacosInstance.php
│ ├── NacosOperator.php
│ └── NacosService.php
├── Listener
│ ├── BootAppConfListener.php 启动时自动注册
│ └── OnShutdownListener.php 关闭服务时自动注销
├── Model 领域模型
│ ├── AbstractModel.php
│ ├── ConfigModel.php
│ ├── InstanceModel.php
│ └── ServiceModel.php
├── Process 心跳
│ └── InstanceBeatProcess.php
├── ThisInstance.php 当前节点
├── ThisService.php 当前服务
└── Util
├── Guzzle.php
└── RemoteConfig.php
BootAppConfListener.php
将在系统启动完成时自动完成实例注册
, 服务注册
如果需要在服务下线时自动注销服务, 请增加如下配置, 以监听 Shutdown
事件
// config/autoload/server.php
return [
// ...other
'callbacks' => [
// ...other
SwooleEvent::ON_SHUTDOWN => [Hyperf\Framework\Bootstrap\ShutdownCallback::class, 'onShutdown']
]
];
$instance = new ThisInstance();
$service = new ThisService();
$instance = make(NacosInstance::class);
$service = new ServiceModel([
'serviceName' => 'hyperf',
'groupName' => 'api',
'namespaceId' => '5ce9d1c1-6732-4ccc-ae1f-5139af86a845'
]);
$optimal = $instance->getOptimal($service);
BootAppConfListener.php
系统启动时将拉取远程配置, 并合入hyperf
的 Config
FetchConfigProcess.php
自定义进程将监听配置, 若有更新将发送PipeMessage
到各服务worker
进程, 并合入当前进程的 Config
如果服务如下配置
// config/autoload/nacos.php
return [
'enable' => true, // 是否开启自动注册 默认false
'deleteServiceWhenShutdown' => true, // 是否开启自动注销 默认false
'host' => '127.0.0.1',
'port' => '8848',
// 服务配置 serviceName, groupName, namespaceId
// protectThreshold, metadata, selector
'service' => [
'serviceName' => 'hyperf',
'groupName' => 'api',
'namespaceId' => 'namespace_id',
'protectThreshold' => 0.5,
],
// 节点配置 serviceName, groupName, weight, enabled,
// healthy, metadata, clusterName, namespaceId, ephemeral
'client' => [
'namespaceId' => 'namespace_id', // 注意此处必须和service保持一致
'serviceName' => 'hyperf',
'groupName' => 'DEFAULT',
'weight' => 80,
'enabled' => true,
'healthy' => true,
'cluster' => 'DEFAULT',
'ephemeral' => true,
'beatEnable' => true,// 心跳
'beatInterval' => 5,// s
],
// 配置刷新
'configReloadEnable' => false,
'configReloadInterval' => 3,// 间隔 s
// 远程配置合并节点, 默认 config 根节点
'configAppendNode' => 'nacos_conf',
'listenerConfig' => [
// 配置项 dataId, group, tenant, type, content
[
'dataId' => 'hyperf-service-config',
'group' => 'DEFAULT_GROUP',
],
[
'dataId' => 'hyperf-service-config-yml',
'group' => 'DEFAULT_GROUP',
'type' => 'yml',
],
],
];
系统将自动监听listenerConfig
中的配置, 并将其合并入hyperf Config
对象的指定(configAppendNode
) 节点, 可以用config('nacos_conf.***')
获取, 若没有配置 configAppendNode
项, 将会并入 Config
对象根节点.
ext-json
, ext-yaml
, ext-simplexml
, ext-libxml