imiphp / imi-nacos
imi 框架 Nacos 组件。imi Nacos component.
Installs: 19
Dependents: 0
Suggesters: 1
Security: 0
Stars: 5
Watchers: 1
Forks: 1
Open Issues: 0
pkg:composer/imiphp/imi-nacos
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: 2025-10-27 13:38:06 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 开源协议发布,并提供免费使用。
捐赠
开源不求盈利,多少都是心意,生活不易,随缘随缘……