【Spring Cloud Alibaba】007-Nacos 配置*

86 阅读2分钟

【Spring Cloud Alibaba】007-Nacos 配置*

[toc]

一、概述

1、概述

参考:github.com/alibaba/spr…

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使

用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置

jiagou67834rgfsd6

2、对比 spring cloud config

  • spring cloud config 大部分场景结合 git 使用,动态变更还需要依赖 Spring Cloud Bus 消息总线来通过所有的客户端变化;
  • spring cloud config不提供可视化界面;
  • nacos config 使用长轮询更新配置,一旦配置有变动后,通知 Provider 的过程非常的迅速, 从速度上秒杀 spring cloud 原来的 config 几条街。

duibi4355d6

二、基本使用

1、在管理界面新建配置

参考:nacos.io/zh-cn/docs/…

Namespace:代表不同环境,如开发、测试、生产环境。

Group:代表某项目,如XX医疗项目、XX电商项目

DataId:每个项目下往往有若干个工程(微服务),每个配置集(DataId)是一个工程(微服务)主配置文件

image-20230223162541759

2、启动权限

image-20230223152610041

3、 搭建 nacos-config 服务

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的自动变更

第一步:引入依赖

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

第二步:修改 yaml 配置文件

参考文章:www.modb.pro/db/390266

spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
      config:
        group: DEFAULT_GROUP
        server-addr: localhost:8848
        username: nacos
        password: nacos、
        # 新版命名空间不能使用 public
        namespace: 74065c76-2e4e-44ba-935e-a6f88f44f83c
  config:
    import:
      - optional:nacos:test.yaml

第三步:修改启动类

public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(OrderApplication.class, args);
    String name = context.getEnvironment().getProperty("user.name");
    String age = context.getEnvironment().getProperty("user.age");
    System.out.println("name is " + name + ", age is " + age);
}

第四步:运行测试

image-20230223162512852

三、动态获取最新配置

@Value 注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用 @RefreshScope 注解!

@RestController
@RefreshScope
public class TestController {
    @Value("${user.nickname}")
    private String nickname;
    
    @GetMapping("/user")
    public String hello() {
        return nickname;
    }
}

四、配置中心原理

image-20230223164221450