李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
03.Nacos作为服务配置中心基础配置演示
Leefs
2023-01-07 AM
2031℃
0条
[TOC] ### 一、概述 + 在微服务架构中,配置中心就是统一管理各个微服务配置文件的服务。 + 把传统的单体jar包拆分成多个微服务后,配置文件也要拆分,每个微服务都要有自己的配置文件。 + 为了统一维护,方便管理,所以出现了配置中心的概念,所有的微服务配置文件都在配置中心中管理和读取。 ### 二、配置中心的优势 **微服务架构下关于配置文件的一些问题**: + **配置文件相对分散** 在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。 + **配置文件无法区分环境** 微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要到各个微服务下手动维护,这比较困难。 + **配置文件无法实时更新** 当修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。 **配置中心解决上述问题的思路**: 1. 首先把项目中各种配置全部都放到一个集中的地方进行统一管理。 2. 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。 3. 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。 ![03.Nacos作为服务配置中心演示01.jpg](https://lilinchao.com/usr/uploads/2023/01/1187715304.jpg) ### 三、常见的配置中心 + **Apollo** Apollo是由携程开源的分布式配置中心。支持的功能:配置更新之后可以实时生效,支持灰度发布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。 + **Disconf** `Disconf`是由百度开源的分布式配置中心。它是基于`Zookeeper`来实现配置变更后实时通知和生效的。 + **SpringCloud Config** 这是Spring Cloud中带的配置中心组件。它和Spring是无缝集成,使用起来非常方便,并且它的配置存储支持Git。不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。 + **Nacos** 这是SpingCloud alibaba技术栈中的一个组件,前面已经使用它做过服务注册中心。其实它也集成了服务配置的功能,可以直接使用它作为服务配置中心。 **作用**:支持**系统配置的集中管理**(编辑、存储、分发)、**动态更新不重启**、**回滚配置**(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。 ### 四、基础配置 #### 4.1 建module `config-nacos-client` #### 4.2 修改POM文件 ```xml
4.0.0
com.lilinchao
SpringCloudAlibabaDemo
0.0.1-SNAPSHOT
config-nacos-client
8
8
UTF-8
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
``` #### 4.3 yml配置 ##### 概述 > 这里需要配置两个:`bootstrap.yml`和`application.yml`。 > > + **全局的放在**:`bootstrap.yml` > + **服务自身的放在**:`application.yml` `Nacos`同`springcloud-config`一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。 **`bootstrap.yml`和`application.yml`区别?** **(1)加载顺序** bootstrap配置文件是比application配置文件优先加载的,因为bootstrap是由spring父上下文加载,而application是由子上下文加载。 **(2)优先级** bootstrap加载的配置信息是不能被application的相同配置覆盖的,如果两个配置文件同时存在,也是以bootstrap为主 **(3)应用场景** + `bootstrap.yml` :用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。 + `application.yml` :可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。 > 配置文件优先级(由高到低): > > `bootstrap.properties` -> `bootstrap.yml` -> `application.properties` -> `application.yml` ##### 服务端配置 **bootstrap.yml** > + 微服务端口:3377 > > + 服务名:nacos-config-client > > + 注册进nacos:localhost:8848 作为配置客户端 ```yaml # nacos配置 server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} ``` **application.yml** ```yaml spring: profiles: active: dev # 表示开发环境 ``` #### 4.4 主启动类 ```java package com.lilinchao.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class ConfigNacosClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigNacosClientApplication.class, args); } } ``` #### 4.5 业务类 通过Spring Cloud原生注解**@RefreshScope** 实现配置自动更新 ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。 public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } } ``` #### 4.6 在Nacos中添加配置信息 ##### Nacos中的匹配规则 在 Nacos Spring Cloud 中,`dataId` 的完整格式如下: ``` ${prefix}-${spring.profiles.active}.${file-extension} ``` - `prefix` 默认为 `spring.application.name` 的值,也可以通过配置项 `spring.cloud.nacos.config.prefix`来配置。 - `spring.profiles.active` 即为当前环境对应的 profile。 **注意:当 `spring.profiles.active` 为空时,对应的连接符 `-` 也将不存在,dataId 的拼接格式变成 `${prefix}.${file-extension}`** - `file-exetension` 为配置内容的数据格式,可以通过配置项 `spring.cloud.nacos.config.file-extension` 来配置。 目前只支持 `properties` 和 `yaml` 类型。 > 最终公式 > > ${**spring.application.name**}-${**spring.profiles.active**}.${**spring.cloud.nacos.config.file-extension**} > > 结果: `nacos-config-client-dev.yaml` ![03.Nacos作为服务配置中心演示02.png](https://lilinchao.com/usr/uploads/2023/01/386142321.png) ##### 实操 (1)配置列表中添加配置项 ![03.Nacos作为服务配置中心演示03.jpg](https://lilinchao.com/usr/uploads/2023/01/286418759.jpg) (2)新建配置 ```yaml config: info: "config info for dev,from nacos config center." ``` ![03.Nacos作为服务配置中心演示04.jpg](https://lilinchao.com/usr/uploads/2023/01/3490849266.jpg) #### 4.7 测试 启动config-nacos-client服务 > 打开浏览器发送请求:http://localhost:3377/config/info ![03.Nacos作为服务配置中心演示05.jpg](https://lilinchao.com/usr/uploads/2023/01/3420842248.jpg) 测试成功。 **自带动态刷新功能测试** 修改nacos中的yaml配置文件,再次调用查看配置,发现配置刷新了。 ![03.Nacos作为服务配置中心演示06.jpg](https://lilinchao.com/usr/uploads/2023/01/3021525795.jpg)
标签:
SpringCloudAlibaba
,
Nacos
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/2747.html
上一篇
02.Nacos作为服务注册中心演示
下一篇
04.Nacos作为服务配置中心分类配置演示
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Zookeeper
散列
字符串
Tomcat
Java编程思想
nginx
Hbase
DataWarehouse
数据结构和算法
gorm
JavaSE
Scala
CentOS
锁
Livy
MySQL
线程池
栈
查找
Spring
哈希表
Flink
MyBatis
SQL练习题
Python
持有对象
Spark Streaming
序列化和反序列化
并发编程
Spark
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭