SpringCloudAlibaba组件Nacos(作为配置管理中心)

概述

Nacos:Dynamic Naming and Configuration Service
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

简单说就是注册中心 + 配置中心
Nacos = Eureka + Config +Bus

Nacos概念
Nacos架构

本文讲述配置中心,注册中心参考:注册中心

官方文档:Nacos config

官方示例:Nacos Config Example

本文讲配置管理
演示如何使用 Nacos Config Starter 完成 Spring Cloud 应用的配置管理。

Spring Cloud 应用如何接入 Nacos Config

1.pom.xml 文件,引入 Nacos Config Starter。

 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

完整的

<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>

2.bootstrap.properties 配置文件中配置 Nacos Config 元数据

 spring.application.name=nacos-config-example
 spring.cloud.nacos.config.server-addr=127.0.0.1:8848

如:

#Nacos作为配置管理中心
# 服务名
spring.application.name=gulimall-coupon
# 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

在这里插入图片描述

完成上述两步后,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment 的 PropertySources 中。

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

# 即 应用名-环境-文件格式
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

下图使用了yaml,实测可以。再下面的步骤用了properties文件,也是可以的。
在这里插入图片描述

dataId小总结
在这里插入图片描述

3. @RefreshScope 打开动态刷新功能

也就是之前写到properties或yml的配置项,现在可以实现动态的配置,随时修改,立即生效,不需要像之前更换配置需要重启服务。

1.controller

@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @Value("${user.userName}")
    String userName;

    @Value("${user.age}")
    int age;
    @RequestMapping("/member/test")
    public R testRefreshScope(){

        return R.ok().put("userName",userName).put("age",age);
    }
}

要点:使用 @Value 注解来将对应的配置注入到 Controller 的 userName 和 age 字段,并添加 @RefreshScope 打开动态刷新功能

2.application.properties或application.yml中的配置项

这里使用了properties

user.userName=zhangsan2
user.age=20

3.访问controller中的接口

http://localhost:7000/coupon/coupon/member/test
能看到结果为properties文件里的数据。

4.通过Nacos动态配置

在这里插入图片描述

在这里插入图片描述
properties就选properties,yaml就选yaml
dataId的后缀是文件类型

dataId 为 nacos-config-example.properties
 group 为 DEFAULT_GROUP

配置完成后发布
在这里插入图片描述
刷新网页就能看到配置立即生效
在这里插入图片描述

Nacos Config动态刷新的原理(了解)

Nacos Config 数据结构

Nacos Config 主要通过 dataId 和 group 来唯一确定一条配置

Nacos Client 从 Nacos Server 端获取数据时,调用的是此接口 ConfigService.getConfig(String dataId, String group, long timeoutMs)。

Spring Cloud 应用获取数据

自动注入

Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。
即: 如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。

在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。

动态刷新

Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。

关于DataId、命名空间、配置分组

三个都可以作为不同环境的配置区分,一共3种方案
在这里插入图片描述
DataId上面介绍过了

命名空间:

用来配置隔离; 默认:public(保留空间);默认新增的所有配置都在public空间。
命名空间可以用来作不同环境或者不同服务的配置隔离,这里
使用命名空间来隔离每一个微服务的配置。
每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871

使用示例

1.新建命名空间


在这里插入图片描述

2.对应bootstrap.properties

在这里插入图片描述
在这里插入图片描述

配置分组:

  默认所有的配置集都属于:DEFAULT_GROUP;
  如:1111,618,1212

项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod

使用示例

在这里插入图片描述
对应
在这里插入图片描述

#配置分组
spring.cloud.nacos.config.group=dev

加载多配置集

同时加载多个配置集
1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
3)、@Value,@ConfigurationProperties。。。
以前SpringBoot任何方法从配置文件中获取值,都能使用。
配置中心有的优先使用配置中心中的,

使用示例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


#Nacos作为配置管理中心
# 服务名
spring.application.name=gulimall-coupon
# 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

#命名空间
spring.cloud.nacos.config.namespace=8d4e9910-cd0d-468f-b370-8c1dbdbe4861

#配置分组
 spring.cloud.nacos.config.group=dev

#加载多配置集
  # 数据集ID(DATA ID)  ext-config为List数组,通过下标来指定
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
  # 分组
spring.cloud.nacos.config.ext-config[0].group=dev
  # 动态刷新
spring.cloud.nacos.config.ext-config[0].refresh=true


spring.cloud.nacos.config.ext-config[1].data-id=mybatis-plus.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值