返回介绍

Nacos

发布于 2021-04-03 03:37:35 字数 6465 浏览 2323 评论 0 收藏 0

一个 NacosPHP 协程客户端,与 Hyperf 的配置中心、微服务治理完美结合。

安装

composer require hyperf/nacos

发布配置文件

php bin/hyperf.php vendor:publish hyperf/nacos

目录结构

./src
├── Api
│   ├── AbstractNacos.php
│   ├── NacosConfig.php
│   ├── NacosInstance.php
│   ├── NacosOperator.php
│   └── NacosService.php
├── Client.php
├── Config
│   ├── FetchConfigProcess.php
│   ├── OnPipeMessageListener.php
│   └── PipeMessage.php
├── ConfigProvider.php
├── Contract
│   └── LoggerInterface.php
├── Exception
│   ├── InvalidArgumentException.php
│   ├── NacosThrowable.php
│   └── RuntimeException.php
├── Instance.php
├── Listener
│   ├── MainWorkerStartListener.php
│   └── OnShutdownListener.php
├── Model
│   ├── AbstractModel.php
│   ├── ConfigModel.php
│   ├── InstanceModel.php
│   └── ServiceModel.php
├── Process
│   └── InstanceBeatProcess.php
└── Service.php

服务与实例

MainWorkerStartListener.php 将在系统启动完成时自动完成 实例注册服务注册

如果需要在服务下线时自动注销服务,请增加如下配置,以监听 Shutdown 事件

// config/autoload/server.php

return [
    // ...other
    'callbacks' => [
        // ...other
        Event::ON_SHUTDOWN => [Hyperf\Framework\Bootstrap\ShutdownCallback::class, 'onShutdown']
    ]
];

获取当前实例

use Hyperf\Utils\ApplicationContext;
use Hyperf\Nacos\Instance;

$container = ApplicationContext::getContainer();
$instance = $container->get(Instance::class);

获取当前服务

use Hyperf\Utils\ApplicationContext;
use Hyperf\Nacos\Service;

$container = ApplicationContext::getContainer();
$service = $container->get(Service::class);

获取一个服务的最优节点

use Hyperf\Utils\ApplicationContext;
use Hyperf\Nacos\Api\NacosInstance;
use Hyperf\Nacos\Model\ServiceModel;

$container = ApplicationContext::getContainer();
$instance = $container->get(NacosInstance::class);

$service = new ServiceModel([
    'service_name' => 'hyperf',
    'group_name' => 'api',
    'namespace_id' => '5ce9d1c1-6732-4ccc-ae1f-5139af86a845'
]);

$optimal = $instance->getOptimal($service);

配置中心

MainWorkerStartListener.php 系统启动时将拉取远程配置, 并合入hyperfConfig

FetchConfigProcess.php 自定义进程将监听配置, 若有更新将发送 PipeMessage 到各服务worker 进程, 并合入当前进程的 Config

如果服务如下配置

// config/autoload/nacos.php

return [
    // ...other
    'config_reload_interval' => 3,
    // 远程配置合并节点, 默认 config 根节点
    'config_append_node' => 'nacos_config',
    'listener_config' => [
        // 配置项 dataId, group, tenant, type, content
        [
            'data_id' => 'hyperf-service-config',
            'group' => 'DEFAULT_GROUP',
        ],
        [
            'data_id' => 'hyperf-service-config-yml',
            'group' => 'DEFAULT_GROUP',
            'type' => 'yml',
        ],
    ],
];

系统将自动监听listener_config 中的配置,并将其合并入hyperf Config 对象的指定(config_append_node) 节点,可以用config('nacos_config.***') 获取,若没有配置 config_append_node 项,将会并入 Config 对象根节点。

所有配置的 键(key) 在实际发起 API 请求时会自动从下划线风格转换为驼峰风格。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文