配置中心:Nacos

简介

常见的配置中心:SpringBoot+git,zookeeper,redis等,
Nacos除了实现了注册中心还把配置中心结合到了一起,通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。
这样做带来的好处:

  • 分离的多环境配置,可以更灵活的管理权限,安全性更高
  • 应用程序的打包更为纯粹,以实现一次打包,多处运行的特点
    定位配置:Nacos的配置管理模型通过DataId和Group来定位配置内容,除此之外还增加了很多其他的管理功能。

快速入门

通过一个简单的例子来介绍如何在Nacos中创建配置内容以及如何在Spring Cloud应用中加载Nacos的配置信息。

创建配置

第一步:进入Nacos的控制页面,在配置列表功能页面中,点击右上角的“+”按钮,进入“新建配置”页面,如下图填写内容:
在这里插入图片描述备注:

  • Data ID :填入 alibaba-nacos-config-client.properties
  • Group:不修改,使用默认值DEFAULT_GROUP
  • 配置格式:选择Properties
  • 配置内容:应用要加载的配置内容,这里仅作为示例,做简单配置,比如:didispace.title=spring-cloud-alibaba-learning

创建应用

第一步:创建一个Spring Boot应用,可以命名为:alibaba-nacos-config-client。

第二步:编辑pom.xml,加入必要的依赖配置,比如:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
        <optional>true</optional>
    </dependency>
</dependencies>

没有加入nacos的服务发现模块,所以这两个内容是完全可以独立使用的

parent :定义spring boot的版本
dependencyManagement :spring cloud的版本以及spring cloud alibaba的版本,由于spring cloud alibaba还未纳入spring cloud的主版本管理中,所以需要自己加入
dependencies:当前应用要使用的依赖内容。这里主要新加入了Nacos的配置客户端模块:spring-cloud-starter-alibaba-nacos-config。由于在dependencyManagement中已经引入了版本,所以这里就不用指定具体版本了。
第三步:创建应用主类,并实现一个HTTP接口:

@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    @RefreshScope
    static class TestController {

        @Value("${didispace.title:}")
        private String title;

        @GetMapping("/test")
        public String hello() {
            return title;
        }

    }

}

@RefreshScope 注解解释:让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。

第四步:创建配置文件bootstrap.properties,并配置服务名称和Nacos地址

spring.application.name=alibaba-nacos-config-client
server.port=8001

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

注意 :必须使用bootstrap.properties,
spring.application.name值必须与上一阶段Nacos中创建的配置Data Id匹配(除了.properties或者.yaml后缀)。

第五步:验证配置获取和验证动态刷新
用curl或者postman等工具,访问接口: localhost:8001/test,一切正常的话,将返回Nacos中配置的spring-cloud-alibaba-learning。然后,再通过Nacos页面,修改这个内容,点击发布之后,再访问接口,可以看到返回结果变了。

同时,在应用的客户端,我们还能看到如下日志:

2019-01-27 18:39:14.162  INFO 93597 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [didispace.title]

配置的加载规则

Nacos的默认配置:
Data ID : alibaba-nacos-config-client.properties
Group : DEFAULT_GROUP
解释一下这里的配置与对应项目中文件的配置

  • Data ID中的alibaba-nacos-config-client:对应客户端的配置spring.cloud.nacos.config.prefix,默认值为spring.cloud.nacos.config.prefix,即:服务名
  • Data ID中的properties:对应客户端的配置spring.cloud.nacos.config.file-extension,默认值为properties
  • Group的值DEFAULT_GROUP:对应客户端的配置spring.cloud.nacos.config.group,默认值为DEFAULT_GROUP
    注: 应用采取默认的加载配置的方式:Data ID=${spring.application.name}.properties
    Group=DEFAULT_GROUP

例子1: 如何改变配置,不加载默认的应用名,如Data ID=example.properties,Group=DEFAULT_GROUP

spring.cloud.nacos.config.prefix=example

例子2: 如想加载yaml格式的内容,而不是Properties格式的内容如Data ID=example.yaml,Group=DEFAULT_GROUP

spring.cloud.nacos.config.prefix=example
spring.cloud.nacos.config.file-extension=yaml

例子3: 如果对配置进行分组管理,如加载:Data ID=example.yaml,Group=DEV_GROUP

spring.cloud.nacos.config.prefix=example
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.group=DEV_GROUP

思考

Nacos 的三种对应配置,关于前两种spring.cloud.nacos.config.prefixspring.cloud.nacos.config.file-extension大部分使用的默认配置
但是对于spring.cloud.nacos.config.group来说:可以参考Namespace的作用,比如:用它来区分不同的产品组下各个应用的配置内容(解决可能应用名冲突的问题)、或者用它来区分不同用途的配置内容、再或者用它来区分不同环境的配置

参考资料

Spring-cloud-nacos文档

发布了8 篇原创文章 · 获赞 0 · 访问量 45

猜你喜欢

转载自blog.csdn.net/weixin_41213402/article/details/105394213