李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
03.Nacos作为服务配置中心基础配置演示
Leefs
2023-01-07 AM
776℃
0条
[TOC] ### 一、概述 + 在微服务架构中,配置中心就是统一管理各个微服务配置文件的服务。 + 把传统的单体jar包拆分成多个微服务后,配置文件也要拆分,每个微服务都要有自己的配置文件。 + 为了统一维护,方便管理,所以出现了配置中心的概念,所有的微服务配置文件都在配置中心中管理和读取。 ### 二、配置中心的优势 **微服务架构下关于配置文件的一些问题**: + **配置文件相对分散** 在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。 + **配置文件无法区分环境** 微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要到各个微服务下手动维护,这比较困难。 + **配置文件无法实时更新** 当修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。 **配置中心解决上述问题的思路**: 1. 首先把项目中各种配置全部都放到一个集中的地方进行统一管理。 2. 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。 3. 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。  ### 三、常见的配置中心 + **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`  ##### 实操 (1)配置列表中添加配置项  (2)新建配置 ```yaml config: info: "config info for dev,from nacos config center." ```  #### 4.7 测试 启动config-nacos-client服务 > 打开浏览器发送请求:http://localhost:3377/config/info  测试成功。 **自带动态刷新功能测试** 修改nacos中的yaml配置文件,再次调用查看配置,发现配置刷新了。 
标签:
SpringCloudAlibaba
,
Nacos
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/2747.html
上一篇
02.Nacos作为服务注册中心演示
下一篇
04.Nacos作为服务配置中心分类配置演示
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
40
标签云
Flume
BurpSuite
SpringCloudAlibaba
Stream流
Golang基础
人工智能
线程池
RSA加解密
Java阻塞队列
Http
队列
字符串
Hive
Tomcat
机器学习
LeetCode刷题
Java编程思想
Spark SQL
Spark Core
CentOS
GET和POST
JVM
容器深入研究
VUE
Linux
并发编程
微服务
Yarn
Docker
稀疏数组
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞