C/C++教程

Nacos配置中心使用

本文主要是介绍Nacos配置中心使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Nacos配置中心使用

    • Nacos配置中心说明
    • Nacos配置管理界面
    • Nacos权限管理
    • Nacos Client读取配置
    • 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配置中心使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!