【第四阶段 day24】Nacos配置中心

【第四阶段 day24】Nacos配置中心,第1张

【第四阶段 day24】Nacos配置中心

文章目录
  • 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.总结

1.配置中心 1.1 概述

配置中心最基础的功能就是存储一个键值对,用户发布一个配置(configKey),然后客户端获取这个配置项(configValue);进阶的功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项.

* 1.2 面试题
  • 什么是配置中心(存储项目配置信息的一个服务)
  • 为什么要使用配置中心(集中管理配置信息,动态发布配置信息)
  • 市场上主流的配置中心(Apollo,nacos…)
2.Nacos配置入门案例

在sca-provider项目中添加一个Controller对象,例如ProviderLogController,基于Controler中的方法演示日志级别的配置

2.1 创建ProviderLogController对象

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


        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
  
2.3 将项目sca-provider的application.yml的名字修改为bootstrap.yml(启动的优先级最高),底层读取的是bootstrap.yml.并添加配置中心配置

server:
  port: 8081
spring:
  application:
    name: sca-provider #进行服务注册必须配置服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #注册地址
      config:
        server-addr:
        file-extension: yml

2.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,…,可以基于日志级别控制日志的输出)
3.Nacos配置管理模型 3.1 概述

nacos配置管理模拟部分(3个)

  • Namespace:命名空间,对不同的环境进行隔离,比如开发环境和生产环境
  • Group:分组,将若干个服务或者若干个配置归为一组
  • Service/DataId:某一个服务或配置集,一般对应一个配置文件
3.2 分组设计及实现 3.2.1 新建配置时指定分组名称 3.2.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
logging:
  level:
    com.jt: warn
3.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: warn
3.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客户端(微服务)是否可以读取共享配置(可以)
4.总结
  • 配置中心的选型(市场活跃度,稳定性,性能,易用)
  • nacos配置中心的基本应用(新建,修改,删除配置以后,在nacos客户端应用配置)
  • nacos配置变更的动态感知(底层原理分析)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5605372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存