Nacos配置中心使用

Nacos配置中心使用

Nacos配置中心说明

官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务端和客户端支持。使用Spring Cloud Alibaba Nacos Config,您可以在Nacos Server集中管理你Spring Cloud应用的外部属性配置。
Nacos配置中心使用
与springcloud config 对比
三个大优势:
1》springcloud config大部分场景结合git使用,动态变更还需要依赖Spring Cloud Bus消息总线来通过所有的客户端变化。
2》springcloud config不提供可视化界面。
3》nacos config使用长轮询更新配置,一旦配置有变动后,通知Provider的过程非常的迅速,从速度上秒杀springcloud原来的config。

对比项/配置中心 spring cloud config apollo nacos
开源时间 2014.9 2016.5 2018.6
配置实时推送 支持(Spring Cloud Bus) 支持(HTTP长轮询1s内) 支持(HTTP长轮询1s内)
版本管理 支持(Git) 自动管理 自动管理
配置回滚 支持(Git) 支持 支持
灰度发布 支持 支持 待支持
权限管理 支持 支持 待支持
多集群多环境 支持 支持 支持
监听查询 支持 支持 支持
多语言 只支持Java Go, C++,Python,Java,.net,OpenAPI Python,Java,Nodejs,OpenAPI
分布式高可用最小集群数量 Config-Server2+Git+MQ Config2+Admin3+Portal*2 + Mysql Nacos*3 + Mysql = 4
配置格式校验 不支持 支持 支持
通信协议 HTTP和AMQP HTTP HTTP
数据一致性 Git保证数据一致性,Config-Server从Git读取数据 数据库模拟消息队列,Apollo定时读取消息 HTTP异步通知
单机读(tps) 7(限流所制) 9000 15000
单机写 5(限流所制) 1100 1800
3节点读 21(限流所制) 27000 45000
3节点写 5(限流所制) 3300 5600

Nacos配置管理界面

Nacos配置参数说明:https://nacos.io/zh-cn/docs/concepts.html
Nacos配置中心使用
Nacos配置中心使用

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

配置分组
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

Nacos权限管理

开启权限服务配置:
修改nacos的application.properties配置文件。

### If turn on auth system:
nacos.core.auth.enabled=true

Nacos配置中心使用

Nacos Client读取配置

1.启动Nacos Server。
2.启动好Nacos之后,在Nacos添加如下的配置:
Nacos配置中心使用
注意:dataid是以properties(默认的文件扩展名方式)为扩展名。

3.客户端使用方式
如果要在您的项目中使用Nacos来实现应用的外部化配置,使用group ID为 com.alibaba.cloud 和 artifact ID为 spring-cloud-alibaba-nacos-config的starter。

<!--Nacos config 的依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

4.创建一个Spring Boot应用

@SpringBootApplication
public class ConfigApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        System.out.println("user name:" + userName + ";age:" + userAge);
    }
}

5.在运行此Example之前,必须使用bootstrap.yml配置文件来配置Nacos Server地址

spring:
  application:
    # 会自动根据服务名拉取dataid对应的配置文件, 如果dataid跟服务名不一致就需要手动指定dataid。
    name: com.mu.order
  cloud:
    nacos:
      server-addr: 192.168.175.1:8848
      username: nacos
      password: nacos
      config:
        namespace: public

6.验证
Nacos配置中心使用

Nacos其他扩展配置

最佳实践:
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX学校项目,XX电商项目
DataId:每个项目下往往有若干个工程(微服务),每个配置集(DataId)是一个工程(微服务)的主配置文件
Nacos配置中心使用

1.支持profile粒度的配置
application.yml文件内容:

server:
  port: 8050
spring:
  profiles:
    active: dev
# 在配置中心: 可以通过profile进行设置,
# 只有默认的配置文件才能结合profile进行使用
# 对应的Dataid: ${spring.application.name}-${profile}.${file-extension:properties}
# profile的后缀必须跟随默认配置文件的格式来

bootstrap.yml文件内容:

spring:
  application:
    # 会自动根据服务名拉取dataid对应的配置文件, 如果dataid跟服务名不一致就需要手动指定dataid。
    # 跟服务名相同的dataid的配置文件,称之为默认的配置文件
    # 除了默认的配置文件,其他配置文件必须写上后缀
    name: com.mu.order
  cloud:
    nacos:
      server-addr: 192.168.175.1:8848
      username: nacos
      password: nacos
      config:
        namespace: public

        # Nacos客户端默认Properties的文件扩展名
        # 一旦修改成了非Properties格式,则必须通过file-extension进行设置
        file-extension: yaml
        # nacos客户端将无法感知配置的变化
        #refresh-enabled: false

        # 配置文件的优先级(优先级大的覆盖优先级小的,并且会形成互补)
        # profile > 默认配置文件

nacos中的配置:
Nacos配置中心使用

测试:
Nacos配置中心使用
2.支持自定义namespace的配置
用于进行租户粒度的配置隔离,不同的命名空间下,可以存在相同的Group 或 Data ID 的配置。namespace的常用场景之一是不同环境配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定${spring.cloud.nacos.config.namespace}配置的情况下,默认使用的是Nacos上Public这个namespace,如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring:
  application:
    # 会自动根据服务名拉取dataid对应的配置文件, 如果dataid跟服务名不一致就需要手动指定dataid。
    # 跟服务名相同的dataid的配置文件,称之为默认的配置文件
    # 除了默认的配置文件,其他配置文件必须写上后缀
    name: com.mu.order
  cloud:
    nacos:
      server-addr: 192.168.175.1:8848
      username: nacos
      password: nacos
      config:
        namespace: dev
        # Nacos客户端默认Properties的文件扩展名
        # 一旦修改成了非Properties格式,则必须通过file-extension进行设置
        file-extension: yaml

注意:该配置必须放在bootstrap.properties文件中。此外 spring.cloud.nacos.config.namespace的值是namespace对应的id,id值可以在Nacos的控制台获取。并且在添加配置时注意不要选择其他的namespace,否则将会导致读取不到正确的配置。

Nacos配置中心使用

3.支持自定义Group的配置
Group是组织配置的维度之一。通过一个有意义的字符串(如Buy 或 Trade)对配置集进行分组,从而区分Data ID相同的配置集。当您在nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如database_url配置和MQ_topic配置。
在没有明确指定${spring.cloud.nacos.config.group}配置的情况下,默认是DEFAULT_GROUP。如果需要自定义自己的Group,可以通过以下配置来实现:

spring:
  application:
    # 会自动根据服务名拉取dataid对应的配置文件, 如果dataid跟服务名不一致就需要手动指定dataid。
    # 跟服务名相同的dataid的配置文件,称之为默认的配置文件
    # 除了默认的配置文件,其他配置文件必须写上后缀
    name: com.mu.order
  cloud:
    nacos:
      server-addr: 192.168.175.1:8848
      username: nacos
      password: nacos
      config:
        namespace: dev
        group: mu

        # Nacos客户端默认Properties的文件扩展名
        # 一旦修改成了非Properties格式,则必须通过file-extension进行设置
        file-extension: yaml

注意:该配置必须放在bootstrap.properties文件中。并且在添加配置时Group的值一定要和spring.cloud.nacos.config.group的配置值一致。
Nacos配置中心使用

4.支持自定义扩展的Data Id配置
Data ID是组织划分配置的维度之一。Data ID通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID通常采用类Java包(com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
通过自定义扩展的Data Id配置,记可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

spring:
  application:
    # 会自动根据服务名拉取dataid对应的配置文件, 如果dataid跟服务名不一致就需要手动指定dataid。
    # 跟服务名相同的dataid的配置文件,称之为默认的配置文件
    # 除了默认的配置文件,其他配置文件必须写上后缀
    name: com.mu.order
  cloud:
    nacos:
      server-addr: 192.168.175.1:8848
      username: nacos
      password: nacos
      config:
        #namespace: public
        namespace: dev
        group: mu
        shared-configs:
          - dataId: com.mu.common.properties
            refresh: true
            group: mu # 默认是Default-group
        #extension-configs[0]:
          #dataId: com.mu.common1.properties
          #refresh: true
          #group: mu


        # Nacos客户端默认Properties的文件扩展名
        # 一旦修改成了非Properties格式,则必须通过file-extension进行设置
        file-extension: yaml

        # nacos客户端将无法感知配置的变化
        # refresh-enabled: false

        # 配置文件的优先级(优先级大的覆盖优先级小的,并且会形成互补)
        # profile > 默认配置文件 >extension-configs(下标越大优先级就越大)> shared-configs(下标越大优先级就越大)

可以看到:
1》通过spring.cloud.nacos.config.extension-config[n].data-id的配置方式来支持多个Data id的配置。
2》通过spring.cloud.nacos.config.extension-config[n].group的配置方式自定义Data Id所在的组,不明确配置的话,默认是DEFAULT_GROUP。
3》通过spring.cloud.nacos.config.extension-config[n].refresh的配置方式来控制该Data Id在配置变更时,是否支持应用中的可动态刷新,感知到最新的配置值。默认是不支持的。

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

spring.cloud.nacos.config.extension-config[n].data-id的值必须带文件扩展名,文件扩展名即可支持properties,又可以支持yaml/yml。此时spring.cloud.nacos.config.file-extension的配置对自定义扩展配置的Data Id文件扩展名没有影响。
Nacos配置中心使用

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

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

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

    @RequestMapping("/show")
    public String show(){
        return userName;
    }
}
上一篇:Sleuth+Zipkin 服务链路追踪


下一篇:[转]PCL 常用小知识 - 采男孩的小蘑菇 - 博客园(转载请删除括号里的内容)