- 1.配置中心
- 1.1 概述
- * 1.2 面试题
- 2.Nacos配置入门案例
- 2.1 创建ProviderLogController对象
- 2.2 在已有的sca-provider项目中添加配置依赖
- 2.3 将项目sca-provider的application.yml的名字修改为bootstrap.yml(启动的优先级最高),底层读取的是bootstrap.yml.并添加配置中心配置
- 2.4 新建Nacos配置
- 2.4.1 新建配置
- 2.4.2 成功页面
- 2.5 @RefreshScope注解的应用
- 2.5.1 在ProviderLogController类的上面添加一个@RefreshScope注解
- 2.5.2 添加ProviderLogController中添加一个获取日志级别的属性和方法
- * 2.6 面试题
- 3.Nacos配置管理模型
- 3.1 概述
- 3.2 分组设计及实现
- 3.2.1 新建配置时指定分组名称
- 3.2.2 配置发布以后,修改配置,在配置内部加上刚刚创建的分组
- 3.2.3 在指定的Controller类中添加属性和方法用于获取和输出DEFAULT_GROUP_51中的useLocalCache的值
- 3.2.4 重启服务
- 3.3 共享配置设计及读取
- 3.3.1 在nacos中创建一个共享配置文件
- 3.3.2 在指定的微服务配置文件中设置对共享配置文件的读取
- 3.2.3 在指定的Controller类中读取和应用共享配置
- *3.3 面试题
- 4.总结
配置中心最基础的功能就是存储一个键值对,用户发布一个配置(configKey),然后客户端获取这个配置项(configValue);进阶的功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项.
* 1.2 面试题- 什么是配置中心(存储项目配置信息的一个服务)
- 为什么要使用配置中心(集中管理配置信息,动态发布配置信息)
- 市场上主流的配置中心(Apollo,nacos…)
2.1 创建ProviderLogController对象在sca-provider项目中添加一个Controller对象,例如ProviderLogController,基于Controler中的方法演示日志级别的配置
package com.jt.provider.controller; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; //@Slf4j @RestController public class ProviderLogController { private static Logger log=LoggerFactory.getLogger(ProviderLogController.class); @GetMapping("/provider/doLog01") public String doLog01(){ System.out.println("=====doLog01====="); log.trace("====trace==="); log.debug("====debug====="); log.info("=====info====="); log.warn("=====warn====="); log.error("=====error====="); return "log config test"; } }2.2 在已有的sca-provider项目中添加配置依赖
nacos配置中心依赖,当添加了此依赖以后,系统会为我们注入一些API对象
基于这些对象可以获取配置中心的数据,同时要求项目中的配置文件必须为bootstrap.yml
2.3 将项目sca-provider的application.yml的名字修改为bootstrap.yml(启动的优先级最高),底层读取的是bootstrap.yml.并添加配置中心配置com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config
server: port: 8081 spring: application: name: sca-provider #进行服务注册必须配置服务名 cloud: nacos: discovery: server-addr: localhost:8848 #注册地址 config: server-addr: file-extension: yml2.4 新建Nacos配置 2.4.1 新建配置 2.4.2 成功页面 2.5 @RefreshScope注解的应用
对于nacos配置中心而言,有系统内部对配置变化的感知,还有外部系统对配置的感知,如果在浏览器内部中看到日志级别的变化,实现:
2.5.1 在ProviderLogController类的上面添加一个@RefreshScope注解*注解描述类时,会在配置中心数据发生变化后,再次访问此注解描述的对象 * 会重新构建对象,初始化属性值 */ @RefreshScope public class ProviderLogController {...}2.5.2 添加ProviderLogController中添加一个获取日志级别的属性和方法
@Value("${logging.level.com.jt:error}") private String logLevel; @GetMapping("/provider/doLog02") public String doLog02(){ log.info("log level is {}",logLevel); return "log level is "+logLevel; }* 2.6 面试题
- 配置中心一般配置什么内容?(可能会经常变化的配置信息,比如连接池,日志,线程池,限流熔断规则)
- 什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册信息,配置中心)
- 项目中为什么定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
- nacos配置中心宕机了,我们的服务还可以读取到配置信息码(可以从内存,客户端获取了配置中心的配置信息以后,会将配置信息在本地内存中存储一份)
- 微服务应用中我们的客户端如何获取配置中心的信息(我们的服务一般首先会从内存读取配置信息,同时我们的微服务还可以定时向nacos配置中心发请求拉取更新的配置信息)
- 微服务应用中客户端如何感知配置中心数据变化?(1.4.x版本的nacos客户端会基于长轮询机制从nacos获取配置信息,所谓的长轮询就是没有配置更新时,会在nacos服务端的队列进行等待.)
- 服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,配置文件名字bootstrap.yml,配置中心的dataId名字是否正确,分组是否正确,配置的名字是否正确,缩进关系是否正确,假如是动态发布,类上是否有@RefreshScope注解)
- 你项目中使用的日志规范是什么?(SLF4J)
- 你了解项目中的日志级别吗?(debug,info,error,…,可以基于日志级别控制日志的输出)
nacos配置管理模拟部分(3个)
- Namespace:命名空间,对不同的环境进行隔离,比如开发环境和生产环境
- Group:分组,将若干个服务或者若干个配置归为一组
- Service/DataId:某一个服务或配置集,一般对应一个配置文件
server: port: 8081 spring: application: name: sca-provider #进行服务注册必须配置服务名 cloud: nacos: discovery: server-addr: localhost:8848 #注册地址 config: server-addr: file-extension: yml namespace: 9a346e56-9a77-4217-8788-fc6ad1388113 group: DEFAULT_GROUP_51 logging: level: com.jt: warn3.2.3 在指定的Controller类中添加属性和方法用于获取和输出DEFAULT_GROUP_51中的useLocalCache的值
package com.jt; import com.jt.common.cache.DefaultCache; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.import; @SpringBootApplication @import(DefaultCache.class) public class ProvideApplication { // @Bean // public DefaultCache defaultCache(){ // return new DefaultCache(); // } public static void main(String[] args) { SpringApplication.run(ProvideApplication.class,args); } }3.2.4 重启服务 3.3 共享配置设计及读取 3.3.1 在nacos中创建一个共享配置文件 3.3.2 在指定的微服务配置文件中设置对共享配置文件的读取
server: port: 8081 spring: application: name: sca-provider #进行服务注册必须配置服务名 cloud: nacos: discovery: server-addr: localhost:8848 #注册地址 config: server-addr: file-extension: yml namespace: 9a346e56-9a77-4217-8788-fc6ad1388113 # group: DEFAULT_GROUP_51 shared-configs[0]: data-id: app-public.yml refresh: true #默认false,共享配置更新,引用此配置的地方是否要更新 logging: level: com.jt: warn3.2.3 在指定的Controller类中读取和应用共享配置
package com.jt.provider.controller; 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; @RefreshScope @RestController public class ProviderSecretController { @Value("${app.secret:123456}") private String secret; @GetMapping("/provider/secret") public String doGetSecret(){ //return String.format() return "The Secret is "+secret; } }*3.3 面试题
- nacos配置管理模型的背景(环境不同配置不同)
- nacos配置中的管理模型是什么样子的?(namespace,group,service/data-id)
- nacos客户端(微服务)是否可以读取共享配置(可以)
- 配置中心的选型(市场活跃度,稳定性,性能,易用)
- nacos配置中心的基本应用(新建,修改,删除配置以后,在nacos客户端应用配置)
- nacos配置变更的动态感知(底层原理分析)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)