nacos官网的介绍
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施
微服务之间的调用会有很多的配置文件,多台服务器维护起来比较麻烦,所以选择阿里云的nacos的配置中心
php的框架hyperf很好的支持了
composer require hyperf/config-center
使用 Nacos 需安装
composer require hyperf/config-nacos
主要的看配置文件
<?php
declare(strict_types=1);
use Hyperf\ConfigCenter\Mode;
return [
// 是否开启配置中心
'enable' => (bool) env('CONFIG_CENTER_ENABLE', true),
// 使用的驱动类型,对应同级别配置 drivers 下的 key
'driver' => env('CONFIG_CENTER_DRIVER', 'nacos'),
// 配置中心的运行模式,多进程模型推荐使用 PROCESS 模式,单进程模型推荐使用 COROUTINE 模式
'mode' => env('CONFIG_CENTER_MODE', Mode::PROCESS),
'drivers' => [
'apollo' => [
'driver' => Hyperf\ConfigApollo\ApolloDriver::class,
// Apollo Server
'server' => 'http://127.0.0.1:9080',
// 您的 AppId
'appid' => 'test',
// 当前应用所在的集群
'cluster' => 'default',
// 当前应用需要接入的 Namespace,可配置多个
'namespaces' => [
'application',
],
// 配置更新间隔(秒)
'interval' => 5,
// 严格模式,当为 false 时,拉取的配置值均为 string 类型,当为 true 时,拉取的配置值会转化为原配置值的数据类型
'strict_mode' => false,
// 客户端IP
'client_ip' => \Hyperf\Utils\Network::ip(),
// 拉取配置超时时间
'pullTimeout' => 10,
// 拉取配置间隔
'interval_timeout' => 1,
],
'nacos' => [
'driver' => Hyperf\ConfigNacos\NacosDriver::class,
// 配置合并方式,支持覆盖和合并
'merge_mode' => Hyperf\ConfigNacos\Constants::CONFIG_MERGE_OVERWRITE,
'interval' => 3,
// 如果对应的映射 key 没有设置,则使用默认的 key
'default_key' => 'databases',
'listener_config' => [
// dataId, group, tenant, type, content
// 映射后的配置 KEY => Nacos 中实际的配置
'databases' => [
'tenant' => 'tenant', // corresponding with service.namespaceId
'data_id' => 'hyperf-service-config',
'group' => 'DEFAULT_GROUP',
'type' => 'json',
],
// 'nacos_config.data' => [
// 'data_id' => 'hyperf-service-config-yml',
/// 'group' => 'DEFAULT_GROUP',
// 'type' => 'yml',
// ],
],
'client' => [
// nacos server url like https://nacos.hyperf.io, Priority is higher than host:port
// 'uri' => '',
'host' => '127.0.0.1',
'port' => 8848,
'username' => null,
'password' => null,
'guzzle' => [
'config' => null,
],
],
],
'aliyun_acm' => [
'driver' => Hyperf\ConfigAliyunAcm\AliyunAcmDriver::class,
// 配置更新间隔(秒)
'interval' => 5,
// 阿里云 ACM 断点地址,取决于您的可用区
'endpoint' => env('ALIYUN_ACM_ENDPOINT', 'acm.aliyun.com'),
// 当前应用需要接入的 Namespace
'namespace' => env('ALIYUN_ACM_NAMESPACE', ''),
// 您的配置对应的 Data ID
'data_id' => env('ALIYUN_ACM_DATA_ID', ''),
// 您的配置对应的 Group
'group' => env('ALIYUN_ACM_GROUP', 'DEFAULT_GROUP'),
// 您的阿里云账号的 Access Key
'access_key' => env('ALIYUN_ACM_AK', ''),
// 您的阿里云账号的 Secret Key
'secret_key' => env('ALIYUN_ACM_SK', ''),
'ecs_ram_role' => env('ALIYUN_ACM_RAM_ROLE', ''),
],
'etcd' => [
'driver' => Hyperf\ConfigEtcd\EtcdDriver::class,
'packer' => Hyperf\Utils\Packer\JsonPacker::class,
// 需要同步的数据前缀
'namespaces' => [
'/application',
],
// `Etcd` 与 `Config` 的映射关系。映射中不存在的 `key`,则不会被同步到 `Config` 中
'mapping' => [
// etcd key => config key
'/application/test' => 'test',
],
// 配置更新间隔(秒)
'interval' => 5,
'client' => [
# Etcd Client
'uri' => 'http://127.0.0.1:2379',
'version' => 'v3beta',
'options' => [
'timeout' => 10,
],
],
],
'zookeeper' => [
'driver' => Hyperf\ConfigZookeeper\ZookeeperDriver::class,
'server' => env('ZOOKEEPER_SERVER', '127.0.0.1:2181'),
'path' => env('ZOOKEEPER_CONFIG_PATH', '/conf'),
'interval' => 5,
],
],
];
tenant 对应的是 命名空间id
data_id 对应的是Data Id
group 对应的是group
阿里云配置成json
使用直接就是和框架的语法一样就行
比如你要配置databases
config("databases.default.host")就可以拿到配置项
如果type配置的是yml;需要安装扩展、
不安装会报错Fatal error: Uncaught Error: Call to undefined function yaml_parse() in /Applications/MxSrvs/www/jdd/hyperf-skeleton/vendor/hyperf/config-nacos/src/Client.php:84
Stack trace:
yum install libyaml-devel
wget https://pecl.php.net/get/yaml-2.2.2.tgz
tar -zxvf yaml-2.2.2.tgz
phpize
./configure
make && make install