imiphp / imi-nacos
imi 框架 Nacos 组件。imi Nacos component.
v2.1.0-beta5
2022-10-27 06:45 UTC
Requires
- yurunsoft/nacos-php: ~1.0.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ~3.4.0
- imiphp/imi: 2.1.x-dev
- imiphp/imi-config-center: 2.1.x-dev
- imiphp/imi-fpm: 2.1.x-dev
- imiphp/imi-service: 2.1.x-dev
- imiphp/imi-swoole: 2.1.x-dev
- imiphp/imi-workerman: 2.1.x-dev
- phpstan/phpstan: ~1.8.0
- phpunit/phpunit: >=9
- rector/rector: ^0.12.10
- swoole/ide-helper: ^4.8
Suggests
- imiphp/imi-config-center: Config center
- imiphp/imi-service: service
This package is auto-updated.
Last update: 2024-10-27 11:15:21 UTC
README
介绍
此项目是 imi 框架的 Nacos 组件。
正在开发中,随时可能修改,请勿用于生产环境!
支持的功能:
-
配置中心
-
服务注册
安装
composer require imiphp/imi-nacos:~2.1.0
使用说明
配置中心
配置
@app.beans
:
[ 'ConfigCenter' => [ // 'mode' => \Imi\ConfigCenter\Enum\Mode::WORKER, // 工作进程模式 'mode' => \Imi\ConfigCenter\Enum\Mode::PROCESS, // 进程模式 'configs' => [ 'nacos' => [ 'driver' => \Imi\Nacos\Config\NacosConfigDriver::class, // Nacos 客户端连接配置 'client' => [ 'host' => '127.0.0.1', // 主机名 'port' => 8848, // 端口号 'prefix' => '/', // 前缀 'username' => 'nacos', // 用户名 'password' => 'nacos', // 密码 'timeout' => 60000, // 网络请求超时时间,单位:毫秒 'ssl' => false, // 是否使用 ssl(https) 请求 'authorizationBearer' => false, // 是否使用请求头 Authorization: Bearer {accessToken} 方式传递 Token,旧版本 Nacos 需要设为 true ], // 监听器配置 'listener' => [ 'timeout' => 30000, // 配置监听器长轮询超时时间,单位:毫秒 'failedWaitTime' => 3000, // 失败后等待重试时间,单位:毫秒 'savePath' => Imi::getRuntimePath('config-cache'), // 配置保存路径,默认为空不保存到文件。php-fpm 模式请一定要设置! 'fileCacheTime' => 30, // 文件缓存时间,默认为0时不受缓存影响,此配置只影响 pull 操作。php-fpm 模式请一定要设置为大于0的值! 'pollingInterval' => 10000, // 客户端轮询间隔时间,单位:毫秒 ], // 配置项 'configs' => [ 'nacos' => [ 'key' => 'imi-nacos-key1', 'group' => 'imi', 'type' => 'json', // 配置内容类型,Nacos >= 1.3 可以不配,由配置项类型智能指定 ], ], ], ], ], ]
获取配置
\Imi\Config::get('nacos'); // 对应 imi-nacos-key1
写入配置
/** @var \Imi\ConfigCenter\ConfigCenter $configCenter */ $configCenter = App::getBean('ConfigCenter'); $name = 'imi-nacos-key1'; $group = 'imi'; $type = 'json'; $value = json_encode(['imi' => 'niubi']); $configCenter->getDriver('nacos')->push($name, $value, [ 'group' => $group, 'type' => $type, ]);
注册中心
引入依赖
composer require imiphp/imi-service
配置
@app.beans
:
[ 'ServiceRegistry' => [ 'drivers' => [ [ 'driver' => \Imi\Nacos\Service\NacosServiceRegistry::class, // 驱动类名 // 注册的服务列表 'services' => [ 'main', // 格式1:主服务器是 main,子服务器就是子服务器名 // 格式2:数组配置 [ // 所有参数按需设置 'server' => 'main', // 主服务器是 main,子服务器就是子服务器名 // 'instanceId' => '实例ID', 'serviceId' => 'main_test', 'weight' => 1, // 权重 'uri' => 'http://127.0.0.1:8080', // uri // 'host' => '127.0.0.1', // 'port' => 8080, 'metadata' => [ // 'group' => 'DEFAULT_GROUP', // 分组 // 'namespaceId' => '', // 命名空间 // 'metadata' => [], // metadata // 'ephemeral' => true, // 是否为临时实例 ], // 'interface' => 'eth0', // 网卡 interface 名,自动获取当前网卡IP时有效 ], ], 'client' => [ // Nacos 客户端连接配置 'host' => '127.0.0.1', // 主机名 'port' => 8848, // 端口号 'prefix' => '/', // 前缀 'username' => 'nacos', // 用户名 'password' => 'nacos', // 密码 'timeout' => 60000, // 网络请求超时时间,单位:毫秒 'ssl' => false, // 是否使用 ssl(https) 请求 'authorizationBearer' => false, // 是否使用请求头 Authorization: Bearer {accessToken} 方式传递 Token,旧版本 Nacos 需要设为 true ], 'heartbeat' => 3, // 心跳时间,单位:秒 ], ], ], ]
服务发现(负载均衡)
引入依赖
composer require imiphp/imi-service
配置
@app.beans
:
[ 'ServiceDiscovery' => [ 'drivers' => [ [ 'driver' => \Imi\Nacos\Service\NacosServiceDiscoveryDriver::class, // 服务发现驱动 // 'client' => \Imi\Service\Discovery\DiscoveryClient::class, // 服务发现客户端,如无必要不需要修改 // 负载均衡配置 'loadBalancer' => \Imi\Service\LoadBalancer\RandomLoadBalancer::class, // 负载均衡-随机 // 'loadBalancer' => \Imi\Service\LoadBalancer\RoundRobinLoadBalancer::class, // 负载均衡-轮询 // 'loadBalancer' => \Imi\Service\LoadBalancer\WeightLoadBalancer::class, // 负载均衡-权重 // 发现服务列表 'services' => [ 'serviceName', // 改为你的服务名称 ], 'clientConfig' => [ // Nacos 客户端连接配置 'host' => '127.0.0.1', // 主机名 'port' => 8848, // 端口号 'prefix' => '/', // 前缀 'username' => 'nacos', // 用户名 'password' => 'nacos', // 密码 'timeout' => 60000, // 网络请求超时时间,单位:毫秒 'ssl' => false, // 是否使用 ssl(https) 请求 'authorizationBearer' => false, // 是否使用请求头 Authorization: Bearer {accessToken} 方式传递 Token,旧版本 Nacos 需要设为 true ], 'cacheTTL' => 60, // 缓存时间,单位:秒。默认为60秒,设为0不启用缓存 ], ], ], ]
获取服务可用节点
/** @var \Imi\Service\Discovery\ServiceDiscovery $serviceDiscovery */ $serviceDiscovery = \Imi\App::getBean('ServiceDiscovery'); $service = $serviceDiscovery->getInstance('服务名称'); $service->getInstanceId(); // 实例ID,string $service->getServiceId(); // 服务ID,string $service->getWeight(); // 权重,float $service->getUri(); // \Imi\Util\Uri $service->getMetadata(); // 元数据,数组 // 获取服务实例的ip及端口的常用写法 $uri = $service->getUri(); $host = $uri->getHost(); $port = $uri->getPort();
免费技术支持
运行环境
版权信息
imi-nacos
遵循 MulanPSL-2.0 开源协议发布,并提供免费使用。
捐赠
开源不求盈利,多少都是心意,生活不易,随缘随缘……