乐趣区

关于spring-cloud-alibaba:快速搭建-SpringCloud-Alibaba-Nacos-配置中心

Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官网收录。而 Nacos 作为 Spring Cloud Alibaba 的外围组件之一,提供了两个十分重要的性能:服务注册核心(服务注册和发现)性能,和对立配置核心性能。

Nacos 简介

Nacos 致力于帮忙开发者发现、配置和治理微服务。它提供了一组简略易用的个性集,帮忙开发者疾速实现动静服务发现、服务配置、服务元数据及流量治理。

Nacos 个性介绍

Nacos 具备以下个性:

  • 服务发现和服务衰弱监测:反对基于 DNS 和基于 RPC 的服务发现,反对对服务的实时的健康检查,阻止向不衰弱的主机或服务实例发送申请。
  • 动静配置服务:动静配置服务能够让您以中心化、内部化和动态化的形式治理所有环境的利用配置和服务配置。
  • 动静 DNS 服务:动静 DNS 服务反对权重路由,让您更容易地实现中间层负载平衡、更灵便的路由策略、流量管制以及数据中心内网的简略 DNS 解析服务。
  • 服务及其元数据管理:反对从微服务平台建设的视角治理数据中心的所有服务及元数据。

配置核心性能实现

1. 增加依赖

创立一个新的 Spring Boot 我的项目,增加 nacos config 和 web(非必须)框架依赖,如下图所示:

PS:增加 web 依赖次要作用是为了不便前面代码测试。

如果是老我的项目,那么须要手动增加 nacos config 的依赖,批改 pom.xml 文件,增加以下内容:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2. 配置 Nacos Config 信息

在利用的 /src/main/resources/ 目录下,创立疏导配置文件 bootstrap.yml(或 bootstrap.properties),增加以下 Nacos Config 配置信息:

spring:
  application:
    name: nacosconfig # 项目名称和 nacos DataId 相匹配
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 # nacos 地址和端口
        file-extension: yaml # 获取配置文件的格局:yaml
        username: nacos # nacos 认证用户名
        password: nacos # nacos 认证明码
server:
  port: 9001 # 我的项目启动端口

3. 编写代码读取配置文件

创立一个控制器,应用 @Value 注解读取配置信息,读取形式和 Spring Boot 读取本地配置代码统一:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    // 从 nacos 中读取配置项 config.info
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/getconfig")
    public String getConfigInfo(){return configInfo;}
}

4.Nacos 控制台增加配置信息

在 Nacos 控制台创立并设置配置文件,执行步骤如下所示。
首先,在配置列表中点击“增加”按钮,如下图所示:

进入配置页面,新建 YAML 或 Properties 配置文件,如下图所示:

以上要害参数的含意和规定阐明如下。

① Data ID

Data ID 的拼接格局如下:

${prefix} – ${spring.profiles.active} . ${file-extension}

其中

  • prefix 默认为 spring.application.name 的值,也能够通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profiles.active 即为以后环境对应的 profile,当 active profile 为空时,对应的连接符 – 也将不存在,dataId 的拼接格局变成 ${prefix}.${file-extension}
  • file-extension 为配置内容的数据格式,能够通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只反对 properties 类型。

② Group

Group 分组选项,次要是用来隔离不同的配置我的项目的,它的默认值为 DEFAULT_GROUP,能够通过 spring.cloud.nacos.config.group 配置。

配置好相应的内容之后,点击底部的“公布”按钮即可,增加胜利之后会主动返回配置列表,如下图所示:

启动我的项目,查看执行后果如下图所示:

动静刷新性能

动静刷新性能是指:在 Nacos 配置核心批改的配置内容,在不重启我的项目的前提下能够实时的读取到。

Nacos 默认会为所有获取数据胜利的 Nacos 的配置项增加了监听性能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 办法。

如果须要对 Bean 进行动静刷新 ,须要参照 Spring 和 Spring Cloud 标准, 举荐给类增加 @RefreshScope 或 @ConfigurationProperties 注解

以下面的案例来说,如果须要增加动静刷新性能,只须要在控制器上增加 @RefreshScope 注解即可,实现代码如下:

  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.cloud.context.config.annotation.RefreshScope;
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope // 开启配置文件的动静刷新
public class TestController {
    // 从 nacos 中读取配置项 config.info
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/getconfig")
    public String getConfigInfo(){return configInfo;}

}

最终的实现后果如下:

亮点性能介绍

Nacos 配置核心有两个很好用的性能:一个是批改配置时的内容比照,让您一眼就能够看出此次批改的配置内容,避免误操作;第二个是历史版本一键回滚性能,让您可能轻松的实现溯源和回滚配置文件。

1. 配置文件比照

在批改配置文件时,会先呈现一个配置文件的比照预览页面,如下图所示:

这样您就能够分明的看到此次批改和增加的具体配置信息了,从而缩小了误改的危险。

2. 历史版本一键回滚

Nacos 通过提供配置版本治理及其一键回滚能力,帮忙用户改错配置的时候可能疾速复原,升高微服务零碎在配置管理上的肯定会遇到的可用性危险。

我的项目源码

https://gitee.com/mydb/spring-cloud-alibaba-example/tree/master/spring-cloud-nacos-config

总结

Nacos 作为 Spring Cloud Alibaba 的外围组件之一,提供了两个十分重要的性能:注册核心和配置核心性能。其中配置核心是将配置文件从本地化,变更为云端化的过程(Nacos 服务端),这样既能保障配置文件的安全性,又能实时的批改、查看、回滚和动静刷新配置文件了。

参考文档

Nacos 官网文档:https://nacos.io/zh-cn/docs/w…

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java 中文社群

Java 面试合集:https://gitee.com/mydb/interview

退出移动版