zxyfaxcn/nacos

nacos php sdk with hyperf framework

1.0.0 2020-05-24 07:43 UTC

This package is auto-updated.

Last update: 2021-11-15 09:59:50 UTC


README

nacos

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 系统启动时将拉取远程配置, 并合入hyperfConfig

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