【nacos】配置中心的作用和nacos的4种使用方式

1、为什么使用配置中心

在没有配置中心之前,传统应用配置的存在以下痛点:

(1)采用本地静态配置,无法保证实时性:修改配置不灵活且需要经过较长的测试发布周期,无法尽快通知到客户端,还有些配置对实时性要求很高,比方说主备切换配置或者碰上故障需要修改配置,这时通过传统的静态配置或者重新发布的方式去配置,那么响应速度是非常慢的,业务风险非常大

(2)易引发生产事故:比如在发布的时候,容易将测试环境的配置带到生产上,引发生产事故。

(3)配置散乱且格式不标准:有的用properties格式,有的用xml格式,还有的存DB,团队倾向自造轮子,做法五花八门。

(4)配置缺乏安全审计、版本控制、配置权限控制功能:谁?在什么时间?修改了什么配置?无从追溯,出了问题也无法及时回滚到上一个版本;无法对配置的变更发布进行认证授权,所有人都能修改和发布配置。

    而配置中心区别于传统的配置信息分散到系统各个角落的方式,对系统中的配置文件进行集中统一管理,而不需要逐一对单个的服务器进行管理。那这样做有什么好处呢?

(1)通过配置中心,可以使得配置标准化、格式统一化

(2)当配置信息发生变动时,修改实时生效,无需要重新重启服务器,就能够自动感知相应的变化,并将新的变化统一发送到相应程序上,快速响应变化。比方说某个功能只是针对某个地区用户,还有某个功能只在大促的时段开放,使用配置中心后只需要相关人员在配置中心动态去调整参数,就基本上可以实时或准实时去调整相关对应的业务。

(3)通过审计功能还可以追溯问题

2、常用配置中心

微服务中配置中心的主流解决方案主要有三种:Nacos、Apollo、Config+Bus,不过这篇文章我们主要介绍 Nacos 作为配置中心的用法,对其他两种方式感兴趣的读者请自行上网查阅

3.0、使用方式-0

1、导入依赖
         

            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap

        

2、配置中心

在配置中心新建配置
Data Id : 服务名即可,无序添加后缀名
配置格式:选择 properties
​内容:  author=username               

3、测试

@RestController
@RequestMapping("/order")
@RefreshScope
public class OrderController {
​
    private Logger logger = LoggerFactory.getLogger(OrderController.class);
​
    @Autowired
    private RepFeign repFeign;
​
    @GetMapping("/refreshScope")
    public void refreshScope(){
        logger.error(author);
        logger.error(time);
    }
​
​
​
}
​

3、使用方式-1

1、添加依赖


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
        org.springframework.cloud
        spring-cloud-starter-openfeign
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
    
    
        org.springframework.cloud
        spring-cloud-starter-bootstrap
    

2、修改配置文件名 bootstrap.yaml

3、修改配置:

server:
  port: 9107
spring:
  application:
    name: nacos-client2
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        file-extension: yaml
4、创建配置中心的配置

4、使用方式-2

1、创建配置

注意:DataId 格式:服务名—步骤2中spring.profiles.active的值.yaml

2、引用配置中心的配置

server:
  port: 9107
spring:
  profiles:
    active: dev
  application:
    name: nacos-client2
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

5、使用方式-3

1、创建命名空间 2、在对应命名空间下创建配置文件

        dataId命名格式:服务名.yaml  或者  服务名.properties

3、在工程的bootstrap.yml配置文件中配置

server:
  port: 9107
spring:
  application:
    name: nacos-client2
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848   #指定nacos注册中心地址(boostrap.yml中配置后,可在application.yml中不配置)
      config:
        server-addr: 127.0.0.1:8848  #指定nacos配置中心地址
        file-extension: yaml  #指定配置文件后缀名
        group: DEFAULT_GROUP
        namespace: 56a84c30-0f97-492e-9c88-9694d337f20e
        #prefix:${spring.application.name}      #不填写默认就是项目的应用名

6、使用方式-4

当我们微服务的数量越来越多,势必会有相同的配置,这时我们可以将相同的配置抽取出来作为项目中共有的配置,比如集群中的数据源信息、日志的配置信息,nacos 也是支持这种一个配置中心多个配置集这种写法的。

(1)我们在nacos中新建两个 Data ID 分别是 db.yaml 和 redis.yaml 的文件。

(2)在配置文件中分别加入部分配置内容

(3)在 Springboot 项目中添加如下的 nacos 配置:

spring:
  cloud:
    nacos:
      config:
        extension-configs[0]:
          data-id: db.yaml
默认为DEFAULT_GROUP
          group: DEFAULT_GROUP
          # 是否动态刷新,默认为false
          refresh: true
        extension-configs[1]:
          data-id: redis.yaml
          group: DEFAULT_GROUP
          refresh: true

为了更加清晰的在多个应用间配置共享的 Data Id,官方推荐使用 shared-configs,配置如下:

 spring:
  cloud:
    nacos:
      config:
        shared-configs[0]:
          data-id: db.yaml
          # 默认为DEFAULT_GROUP
          group: DEFAULT_GROUP   
          # 是否动态刷新,默认为false
          refresh: true   
        shared-configs[1]:
          data-id: redis.yaml
          group: DEFAULT_GROUP
          refresh: true

(4)思考:在这2个文件中出现相同配置,nacos如何选取?

    当多个 Data Id 同时出现相同的配置时,它的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。

注意:spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。 (5)不同方式配置加载优先级:

    Nacos 配置中心目前提供以下三种配置能力从 Nacos 拉取相关的配置,当三种方式共同使用时,他们的一个优先级关系是:A < B < C:

A:通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置 B:通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置 C:通过内部相关规则(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group)自动生成相关的 Data Id 配置

你可能感兴趣的:(Spring框架,java,数据库,服务器,nacos)