微服务2-nacos 配置中心

1什么是配置中心

在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
在这里插入图片描述

2为什么要使用配置中心

配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。

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

在这里插入图片描述

3 下载部署

见nacos 注册中心篇

4 实战

4.1 引入 pom


        <!-- bootstrap 启动器,让 bootstrap.yaml 生效 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

4.2 bootstrap.yml 配置

配置中心的配置只能放在bootstrap.yml 中

spring:
  application:
    # 应用名称
    name: mycloud-nacos

  profiles:
    # 环境配置
    active: pro

  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: xxxx:8848
      config:
        # 配置中心地址 默认按照application-name去匹配配置文件
        server-addr: xxxx:8848
        # 配置文件格式
        file-extension: yaml

配置中心地址 默认按照application-name去匹配配置文件,默认读properties后缀。

4.3 nacos 平台新增配置文件

namespace:名称空间用于隔离不同租户的配置。组和数据 id 可以在不同的名称空间中相同。名称空间的典型场景是不同项目组的配置隔离,例如,team1/team2/team3之间的隔离。

Group:默认情况下,当没有定义{ spring.cloud.nacos.config.group }配置时,使用 DEFAULT _ group。如果您需要定义自己的组,可以在以下属性中定义它:

spring.cloud.nacos.config.group=DEVELOP_GROUP

这个配置必须在 bootstrap.properties 文件中,Group 的值必须与 spring.cloud.nacos.config.Group 的值相同,常用来作为不同的项目

Data ID: 默认为 a p p l i c a t i o n . n a m e − {application.name}- application.name{spring.profiles.active}.properties
其中spring.profiles.active 是根据服务application配置文件制定的环境自动适配的
Data ID 默认采用properties后缀我们可以通过 spring.cloud.nacos.config.file-extension: yaml 来让它读取yaml 后缀,可作为区分多模块项目配置文件,以及多环境配置文件

在这里插入图片描述

在这里插入图片描述

3)
配置mycloud-nacos.yaml
在这里插入图片描述

配置mycloud-nacos-dev.yaml
在这里插入图片描述

配置 mycloud-nacos-pro.yaml
在这里插入图片描述

4.4 读取nacos 多环境配置

1) 在nacos 上新增配置文件

@RestController
@RequestMapping("/nacos")
@RefreshScope
@Slf4j
public class TestController {

    @Value("${age}")
    private Integer age;

    @Value("${id}")
    private Integer id;


    @RequestMapping("/testConfig")
    public void testConfig(){
        log.info("-------age:{}-----",age);
        log.info("-------id:{}-----",id);
        log.info("-------name:{}", SpringUtil.getEnvironmentProperty("name"));
    }
}



2) 当  spring.profiles.active: pro 时
![在这里插入图片描述](https://img-blog.csdnimg.cn/e08976c740d44c15beb3ec8d2ca27a41.png)

**可见当指定环境时 mycloud-nacos-pro.yaml
 ,mycloud-nacos.yaml 配置都会被读取且前者中的相同配置会覆盖后者,完全符合springboot中多环境配置文件规则。**


3) 当  spring.profiles.active: dev 时

age 变成了 880 说明nacos的配置会跟着spring.profiles.active 变化。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1964dafc36545c2b97a100362288deb.png)


**3) 当 采用spring.profiles.include:druid,dev 时**

dataId 为 applicationName-dev.yaml, applicationName-druid.yaml 都会被加载




### 4.5读取 nacos 共享配置

1)bootstrap.yaml:

```java
server:
  port: 7001

# Spring
spring:
  application:
    # 应用名称
    name: mycloud-nacos

  profiles:
    # 环境配置
    active: pro

  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: xxxx:8848
      config:
        # 配置中心地址 默认按照application-name去匹配配置文件
        server-addr: xxxx:8848
        # 配置文件格式
        file-extension: yaml
#        共享配置
        shared-configs[0]:
          data-id: common.${spring.cloud.nacos.config.file-extension:yaml}
		  refresh: true #不加共享配置不会生效
  1. nacos上新增配置文件 common-dev.yaml
    在这里插入图片描述

3)设置spring.profiles.active: dev

4)结果

address 已经能够读到,但是我们发现id 并不是common-dev.yaml 中设置的8600 而是mycloud-nacos.yaml 中设置的 1 ,这说明共享配置的优先级比较低。
在这里插入图片描述

4.5 配置自动刷新

@RefreshScope 是nacos 开启配置自动刷新的注解,开启后nacos中配置跟新,服务会拉取最新配置进行更新。

常用搭配
1.@RefreshScope + @ConfigurationProperties()
2.@RefreshScope + @value

测试在nacos2.0版本 @ConfigurationProperties() 不配置@RefreshScope 也可自动刷新,@value必须配置@RefreshScope才可自动刷新。

@Configuration
@ConfigurationProperties(prefix = "auth")
@Data
@Slf4j
public class AuthConfig {

    private String address;

    @PostConstruct
    public void init(){
        log.info("----------auth address:{}",address);
    }
}
    @Value("${testVal}")
    private int testVal;
    @Resource
    private AuthConfig authConfig;
    @GetMapping("/sendmsg")
    public void test(){
        log.info("-----auth authConfig:{}",authConfig);
        log.info("----- testVal:{}",testVal);

    }

改变nacos 配置 authConfig 同步改变,testVal 值没改变,而且发现AuthConfig 中 @PostConstruct 修饰的init方法被调用了,说明nacos上配置刷新时,配置类会重新初始化。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值