12、Hyperf 3 微服务系列 - Nacos 配置中心
hi,我是温新,一名 PHPer
Hyperf 3 微服务代码已上传至 Github:https://github.com/ziruchu/hyperf3-microservice-code
何为配置中心
配置中心用于统一管理各种应用配置
的基础服务组件。
大白话:就是把你某个服务需要的配置交给另外一个配置中心去管理。
为何需要配置中心
微服务部署时,一个服务提供者可能有 N 多个小模块,如果需要改动某个配置,那么这 N 个小模块都需要改。配置中心的作用就是改一个,所有的都改了。
举例说明:卖方的方式,把房子的钥匙交给中介,有人要看房的时候就去找中介拿钥匙,而不是找你。假如一天有 100 人看房,没有中介,是不是得找你 100 次。
Hyperf 3.0 中的配置中心
Hyperf 配置中心支持 Nacos、Apollo、Aliyun ACM、Etcd、Zookeeper 等。
Hyperf 3.0 使用 Nacos 配置中心
在这里,使用 192.168.31.92 这台服务器上的 note_provider_user_9605 应用进行演示。
第一步:安装 nacos 组件
composer require hyperf/config-nacos
第二步:生成配置中心文件
# 该命名会在 config/autoload 目录下生成 config_center.php 文件
php bin/hyperf.php vendor:publish hyperf/config-center
第三步:修改 config_center.php 配置文件
<?php
// config/autoload/config_center.php
declare(strict_types=1);
use Hyperf\ConfigApollo\PullMode;
use Hyperf\ConfigCenter\Mode;
return [
'enable' => (bool)env('CONFIG_CENTER_ENABLE', true),
'driver' => env('CONFIG_CENTER_DRIVER', 'nacos'),
'mode' => env('CONFIG_CENTER_MODE', Mode::PROCESS),
'drivers' => [
'nacos' => [
'driver' => Hyperf\ConfigNacos\NacosDriver::class,
'merge_mode' => Hyperf\ConfigNacos\Constants::CONFIG_MERGE_OVERWRITE,
'interval' => 3,
// listener_config 下可以配置多个监听对象
// default_key 表示默认的 key
'default_key' => 'hyperf_config',
'listener_config' => [
// dataId, group, tenant, type, content
'hyperf_config' => [
'tenant' => 'hyperf', // 命名空间id
'data_id' => 'hyperf-service-config', // DataID
'group' => 'DEFAULT_GROUP', // 分组ID
'type' => 'json' // 格式,我们一般选择 json 或者 yaml
],
],
'client' => [
// nacos server url like https://nacos.hyperf.io, Priority is higher than host:port
// 'uri' => '',
'host' => '192.168.31.90',
'port' => 8848,
'username' => 'nacos',
'password' => 'nacos',
'guzzle' => [
'config' => null,
],
],
],
],
];
注意 default_key
的值,后续获取配置中心的配置会用到它。
第四步:Nacos 管理中添加配置
打开 Nacos web 管理界面,在这里添加配置。添加配置的时候注意,选择命名空间为 hyperf
的添加。
添加配置时,配置格式选择 json
。
添加完成后,可以在配置列表中看到添加的配置。
第五步:编写测试代码
1、添加接口方法
<?php
// app/JsonRpc/Interface/UserServiceInterface.php
public function config();
2、实现接口方法
<?php
// app/JsonRpc/Service/UserService.php
// 获取配置中心的配置
public function config()
{
$config = ApplicationContext::getContainer()->get(ConfigInterface::class);
return ResponseTool::success([
'info' => $config->get('hyperf_config'),
]);
}
第六步:测试
测试一:使用 postman 进行测试配置是否生效
POST请求 http://192.168.31.92:9605
请求参数
{
"jsonrpc": "2.0",
"method": "/user/config",
"params": {
},
"id": "",
"context": []
}
返回结果
{
"jsonrpc": "2.0",
"id": "",
"result": {
"code": 200,
"message": "success",
"data": {
"info": {
"info": "测试配置中心",
"client": {
"host": "192.168.31.90",
"port": 8848,
"guzzle": {
"config": null
}
}
}
}
},
"context": []
}
测试二:配置中心修改配置,不重新启动服务,看配置是否生效
修改配置中心的内容,如下:
{
"info": "测试配置中心",
"webname":"自如初博客",
"client": {
"host": "192.168.31.90",
"port": 8848,
"guzzle": {
"config": null
}
}
}
重新请求服务就能看到配置内容已经变成最新的内容了。
环境区分
如何区分不同的环境?如开发环境、生产环境,可以对 DataID 的值进行区分,如采用 app_name 和 app_env 组合,如下参考:
'listener_config' => [
'hyperf_env' => [
'tenant' => 'hyperf', // 命名空间id
'data_id' => env('APP_NAME') . "_" . env("APP_ENV"), // DataID
'group' => 'DEFAULT_GROUP', // 分组ID
'type' => 'json'
],
],
本篇文章到此结束,我是温新。
请登录后再评论