🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
微服务系列 | Nacos云原生配置中心介绍与使用 ## 概述 本文主要学习和使用 nacos 配置中心,从 nacos 配置中心原理出发,深入到实际项目中的nacos配置中心使用。 应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。应用程序根据配置改变自身的行为,但一般程序不会去修改配置。 对于配置,大家在日常开发中应该很熟悉。配置的加载有多种方式,其中硬写代码在应用中的方式最不可取的,而配置文件、环境变量、启动参数、甚至数据库的方式。 在微服务架构中多机器、多应用、多实例的情况下也有很大不足,会使得配置分散,不易于管理。想象一下,如果你启动了一个服务的多个实例,一旦配置需要更改,在没有配置中心的情况,你得将每个实例的配置信息改一遍,这将是非常繁琐且低效的工作。 > 配置中心就是一种统一管理各种应用配置的基础服务组件,它将将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。 ### 什么是Nacos? Nacos 致力于帮助您发现、配置和管理微服务;是微服务/SOA架构体系中服务治理环节的重要成员服务;简单的可以把Nacos理解为一个配置中心和一个服务注册中心。 ### 什么时候用Nacos? * 当我们的服务越来越大、越来越复杂,需要配置的地方越来越多,配置存放的地方也越来越多的时候,为了可以方便统一管理配置,这时候就可以引入Nacos。 * 当我们的服务越来越多,有些时候部署需要做到弹性伸缩,需要用到一些负载策略的时候,可以引入Nacos进行服务的治理。 ## nacos 基本配置信息 * **namespace**:命名空间,默认`public`,标识不同执行环境,如:`dev`,`test`,`prod` … * **group** :组标识,默认`DEFAULT_GROUP`,标识不同项目,如:`ORDER_GROUP`,`USER_GROUP` … * **DataId**:文件唯一标识,简单理解为文件名(在同组中唯一)。 > 如:`dev_ORDER_GROUP_application.yaml` 表示` dev环境_订单项目_ application.yaml`配置文件。 ![](https://img.kancloud.cn/d1/73/d1730f07ef0bea843a045c888427996d_715x159.png) ## 配置中心使用 ### nacos 服务端 这里使用Docker 快速开始,详细可以参考官方文档:https://nacos.io/zh-cn/docs/quickstart/quick-start-docker/ > 部署登录成功界面如下所示: ![](https://img.kancloud.cn/16/0a/160a93dccafece66f8f5b8825480b114_1042x544.png) ### nacos 客户端 客户端使用兔子大佬的webman的nacos插件:https://www.workerman.net/plugin/50 **安装** ``` composer require workbunny/webman-nacos ``` **配置** 配置文件`plugin/workbunny/webman-nacos/app.php` ``` ... 'host' => '192.168.3.29', 'port' => 8848, 'username' => 'nacos', 'password' => 'nacos', ... ``` 以上配置文件主要修改一下nacos的主机端口以及账号和密码。配置完确认无误后,就可以启动webman了。 > 启动界面如下所示: ![](https://img.kancloud.cn/0a/d6/0ad6a61ce9b4314d5ce3b83f9cc20bef_1606x393.png) ### 配置文件 新建`webman`命名空间 ![](https://img.kancloud.cn/9f/64/9f64b012ad2b02d8ab4bc87cedd02a49_1028x296.png) 在`webman`命名空间下新增`config.yaml`配置文件 ![](https://img.kancloud.cn/81/2a/812a2c5a3a416c7c04a8ec9e8f5f1561_1090x334.png) ![](https://img.kancloud.cn/27/65/2765d8cfc1ee24116e1e2ecd131ebc7c_1089x691.png) `config.yaml`配置文件内容 ``` # Redis配置 redis: master: host: '192.168.3.29' port: 6379 password: '123456' # MySQL数据库 mysql: master: host: '127.0.0.8' port: 3306 username: 'root' password: '123456' ``` ## 项目中动态读取配置 运行项目查看配置结果是否一致。定义测试控制器`IndexController`,读取redis默认配置项代码 ``` <?php /** * @desc 微服务系列 | Nacos云原生配置中心介绍与使用 * @author Tinywan(ShaoBo Wan) * @date 2024/6/16 20:14 */ declare(strict_types=1); namespace app\controller; use support\Request; use support\Response; class IndexController { /** * @desc nacos * @param Request $request * @return Response * @author Tinywan(ShaoBo Wan) */ public function nacos(Request $request): Response { $config = \config('redis.default'); return json(['code' => 0, 'msg' => 'ok', 'data' => $config]); } } ``` 访问地址:`http://127.0.0.1:8787/index/nacos` > 请求结果如下: ```json { "code": 0, "msg": "ok", "data": { "host": "192.168.3.29", "port": 6379, "password": "123456", "database": 0 } } ``` 尝试修改nacos配置中心redis配置的密码配置,由`123456`修改为`nacos-resty-123456` > 修改前后内容比较 ![](https://img.kancloud.cn/24/1c/241c883ef28d2f7e95f734953fa97f54_1523x538.png) webman终端监控日志打印输出 ``` POST /nacos/v1/cs/configs/listener?Listening-Configs=config.yaml%02DEFAULT_GROUP%0294dcc283232b714a5ea3fe4d411b308e%0225cb4090-bb73-4134-aa49-7292b6755b22%01&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODQ4NTkzMH0.A4W57FBg02RR-UQ8omz7Z4RhWVxlMZ7svykin-bNQcs HTTP/1.1 Host: 192.168.3.29:8848 User-Agent: workerman/http-client Connection: keep-alive, keep-alive Long-Pulling-Timeout: 30000 /var/www/plugin.admin.webman/config.yaml update and reload. Workerman[start.php] reloading POST /nacos/v1/cs/configs/listener?Listening-Configs=config.yaml%02DEFAULT_GROUP%029baa48521801e997b2fb2e0a2d47cafb%0225cb4090-bb73-4134-aa49-7292b6755b22%01&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODQ4NTkzNX0.M8CXTy7f_xuTM4cpNqcpaMMIyeENw3eghtcNSoA2Oik HTTP/1.1 Host: 192.168.3.29:8848 User-Agent: workerman/http-client Connection: keep-alive, keep-alive Long-Pulling-Timeout: 30000 ``` **通过项目重新读取配置信息** ```json { "code": 0, "msg": "ok", "data": { "host": "192.168.3.29", "port": 6379, "password": "nacos-resty-123456", "database": 0 } } ``` 查看历史修改记录的详情 ![](https://img.kancloud.cn/66/28/6628a04c00d77b5205dc455332a0086a_1105x614.png) 可以通过历史记录进行回滚 ![](https://img.kancloud.cn/ee/99/ee999d44f5432c25adfbaabafbd7e6db_1110x593.png) 监听查询 ![](https://img.kancloud.cn/1c/25/1c25db7e7b69a79c5e21a8e4f6a9b89d_1236x344.png) ## 小结 本文主要介绍了webman如何集成Nacos作为配置中心。本次主要通过webman nacos插件来使用Nacos作为配置中心和发现中心,代码示例仅展示配置中心的使用,发现中心的使用建议参考官方文档说明。