Nacos配置中心使用

Posted mry6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos配置中心使用相关的知识,希望对你有一定的参考价值。

Nacos配置中心说明

官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务端和客户端支持。使用Spring Cloud Alibaba Nacos Config,您可以在Nacos Server集中管理你Spring Cloud应用的外部属性配置。

与springcloud config 对比
三个大优势:
1》springcloud config大部分场景结合git使用,动态变更还需要依赖Spring Cloud Bus消息总线来通过所有的客户端变化。
2》springcloud config不提供可视化界面。
3》nacos config使用长轮询更新配置,一旦配置有变动后,通知Provider的过程非常的迅速,从速度上秒杀springcloud原来的config。

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

Nacos配置管理界面

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

配置集 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 Client读取配置

1.启动Nacos Server。
2.启动好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其他扩展配置

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

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中的配置:

测试:

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,否则将会导致读取不到正确的配置。

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的配置值一致。

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文件扩展名没有影响。

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

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

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

    @RequestMapping("/show")
    public String show()
        return userName;
    

以上是关于Nacos配置中心使用的主要内容,如果未能解决你的问题,请参考以下文章

Nacos配置中心使用

使用nacos配置中心后启动微服务连接不上nacos的问题

你应该了解的Nacos配置中心

nacos使用-服务注册中心和配置中心

Nacos:服务注册及配置中心

SpringCloud怎么使用Nacos做注册中心+配置中心?