首页 > 其他分享 >Nacos系列之(四)Nacos作为服务配置中心

Nacos系列之(四)Nacos作为服务配置中心

时间:2024-02-28 10:56:09浏览次数:24  
标签:系列 spring 配置 nacos Nacos config cloud

Nacos作为服务配置中心

以前我们使用配置中心:

我们把配置放到Github上,Config 作配置中心,Bus实现配置动态刷新

现在使用配置中心:

配置放到Nacos中,Nacos作配置中心,Nacos实现配置动态刷新

1. Nacos作为配置中心-基础配置
  • 建Module【cloudalibaba-config-nacos-client3377】

  • 改POM

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2020</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloudalibaba-config-nacos-client3377</artifactId>
    
        <dependencies>
            <!--nacos-config-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
                <!--nacos-discovery-->
                <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
                <!--web + actuator-->
                <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
                <!--一般基础配置-->
                <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
  • 写YML

    bootstrap.yml(也可使用bootstrap.properties)

    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.59.128:8848 #服务注册中心地址
          config:
            server-addr: 192.168.59.128:8848 #配置中心地址
            file-extension: yaml #指定yaml格式的配置,表示当前项目可以从Nacos中读取结尾为yaml的配置文件
    

    application.yml

    spring:
      profiles:
        active: dev
    

    注:为什么要配置两个yml文件

    ​ Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
    ​ springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。

  • 主启动

    package com.atguigu.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosConfigClientMain3377 {
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class, args);
        }
    }
    
  • 业务类

    package com.atguigu.springcloud.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;
    
    @RestController
    @RefreshScope // 通过SpringCloud原生注解实现配置自动刷新
    public class ConfigClientController {
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    
  • 在Nacos中添加配置信息

    设置Data Id的规则

    官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

    最终的公式:${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

    注:公式中每项都代表客户端项目中配置文件中的内容。

    在此处,spring.application.name和spring.cloud.nacos.config.file-extension对应于bootstrap.yml中的

    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          config:
            file-extension: yaml #指定yaml格式的配置,表示当前项目可以从Nacos中读取结尾为yaml的配置文件
    

    spring.profile.active对应于application.yml中的

    spring:
      profiles:
        active: dev
    
  • 测试

    运行Nacos

    运行cloudalibaba-config-nacos-client3377

    在Nacos的配置管理中增加配置项

    访问http://localhost:3377/config/info,获取到了配置信息

    修改Nacos的配置管理中配置项的内容,再次访问http://localhost:3377/config/info

    几秒后就改变了,说明实时刷新生效了。

2. Nacos作为配置中心-分类配置

用于解决多环境多项目管理的问题。

​ Nacos分类配置的分类设计思想类似Java里面的包名和类名,最外层的namespace是可以用于区分部署环境的,Group和DatalD逻辑上区分两个目标对象。

默认情况:
​ Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
​ Nacos默认的命名空间是public,Namespace主要用来实现隔离。
​ 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

​ Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。
​ Service就是微服务;一个Service可以包含多个Cluster (集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ) ,给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
​ 最后是lnstance,就是微服务的实例。

2.1 多环境配置

改变application.yml中spring.profile.active 配置项的值,即可实现从Nacos中读取不同环境的配置文件

注:前提是保证Nacos中有相应的配置文件

2.2 多分组配置

bootstrap.yml中指定spring.cloud.nacos.config.group 配置项的值,即可实现从Nacos的不同分组下读取配置文件。

在Nacos中准备不同分组的两个同名的配置文件

bootstrap.yml中指定group参数即可实现读取不同分组的配置

2.3 多命名空间配置

命名空间:实现配置隔离

bootstrap.yml中指定spring.cloud.nacos.config.namespace 配置项的值,即可实现从Nacos的不同命名空间下读取配置文件。

在Nacos中新建两个命名空间

创建后的命名空间会显示在配置列表中

分别在dev和test命名空间下创建一个配置文件nacos-config-client-dev.yaml

内容分别是dev命名空间下的文件

config:
    info: "nacos-config-client-dev.yaml, 59b5d080-4875-4c0a-84d3-6ee2fd322a26"

test命名空间下的文件

config:
    info: "nacos-config-client-dev.yaml, 	b99117fd-a7bc-4a9d-9c79-426292b572c0"

bootstrap.yml中指定namespace参数即可实现读取不同命名空间的配置,namespace的值就是创建命名空间时生成的命名空间ID

多命名空间配置的应用场景

  • 环境配置隔离

    开发、生产、测试环境,每个环境一套配置

  • 微服务配置隔离

    每个微服务的配置通过命名空间区分

2.4 其他相关概念
  • 配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

  • 配置集ID:在Nacos中,就是Data ID

    ​ Nacos中的某个配置集的 ID。配置集 ID是组织划分配置的维度之一。Data lD通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID通常采用类Java包(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

  • 配置分组

    默认所有配置集都属于:DEFAULT_GROUP

同样一个配置集属于不同分组

3. 加载多配置集

具体的应用场景:拆分应用的配置到不同的配置集中

在bootstrap.properties/yml中添加如下配置

spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
# 是否动态刷新
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis-plus.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
# 是否动态刷新
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
# 是否动态刷新
spring.cloud.nacos.config.extension-configs[2].refresh=true
4. 总结
  • 使用Nacos作为配置中心后,获取配置的方法:SpringBoot任何从配置文件中获取值的方法在这都适用,如:@Value、@ConfigurationProperties......
  • 配置中心中有的配置项优先使用配置中心的。
  • 开发期间配置可以放在项目中,等项目上线,配置统一放到Nacos中即可。

标签:系列,spring,配置,nacos,Nacos,config,cloud
From: https://www.cnblogs.com/wzzzj/p/18039297

相关文章

  • Nacos系列之(三)Nacos作为服务注册中心
    Nacos作为服务注册中心1.官网文档https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery2.基于Nacos的服务提供者父POM加入如下依赖<!--springcloudalibaba2.1.0.RELEASE--><depende......
  • Nacos系列之(二)安装并运行Nacos
    安装并运行Nacos环境要求:Java8+Maven1.选用版本及下载选用版本:1.1.4下载地址:https://github.com/alibaba/nacos/releases/tag/1.1.42.运行2.1Linux下载后得到nacos-server-1.1.4.tar.gz解压后启动startup.sh-mstandalone注:不要直接执行startup.sh,因为默认会以集群......
  • SpringCloud系列之(十三)FAQ
    关于一些可能出现的报错1.DruidDataSource:testWhileIdleistrue,validationQuerynotset工程启动时可能会报如下错误,这是DruidDataSource保持链接的测试,不影响我们的应用。2.idea未监测到yml文件出现这种情况会造成文件内写配置的时候没有提示正常应该是这样的......
  • SpringCloud系列之(十二)SpringCloud Sleuth分布式请求链路追踪
    SpringCloudSleuth分布式请求链路追踪一、概述1.应用场景​ 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请......
  • SpringCloud系列之(十一)SpringCloud Stream消息驱动
    SpringCloudStream消息驱动企业中常用的消息中间件ActiveMQRabbitMQRocketMQKafka一、消息驱动概述1.为什么引入SpringCloudStream​ 消息中间件的产品众多(ActiveMQ、RabbitMQ、RocketMQ、Kafka...),学习成本高​ 一个系统中可能使用了多种消息中间件,切换/维护/开发成本......
  • SpringCloud系列之(九)服务配置
    服务配置目前在用的服务配置+服务总线的三套方案Config+BusNaccos(Alibaba)Apollo(携程)上海地区一、SpringCloudConfig分布式配置中心1.概述1.1分布式系统面临的配置问题​ 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现......
  • SpringCloud系列之(八)服务网关
    服务网关类比医院的分诊台一、Zuul由Netflix团队研发,不再使用官网:https://github.com/Netflix/zuul/wiki1.Zuul1.x模型​ Springcloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的ServletI0处理模型。​ 学过尚硅谷web中期课程都知道一个题目,Servlet的生命周期......
  • SpringCloud系列之(七)服务降级
    服务降级一、Hystrix断路器1.概述1.1分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。![](https://gitee.com/honourer/picturebed/raw/master/SpringCloud/图像(16).png)服务雪崩​ 多个微服务之间调用......
  • SpringCloud系列之(六)服务调用
    服务调用完成微服务之间的分布式调用一、Ribbon1.概述1.1是什么​ SpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡【消费者侧80】的工具。​ 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组......
  • SpringCloud系列之(五)服务注册中心
    服务注册中心【服务注册与发现】一、EurekaSpring社区出的,Nacos是阿里出的1.Eureka基础知识1.1什么是服务治理?​ SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。​ 在传统的rpc远程调用框架中,服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要......