SpringCloud(Alibaba版)Nacos配置中心

Posted wessonshin

tags:

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

一、Nacos Config简介

是什么?

  Nacos 是一个易于构建云原生应用的动态服务发现,配置管理和服务管理平台。使用 Spring Cloud Alibaba Nacos Config 可基于 Spring Cloud 的编程模型快速访问 Nacos 配置管理功能。

  • Nacos:Dynamic Naming and Configuration Service。

  • Nacos:其实就是 Eureka 服务注册中心 + Config 服务配置中心 + Bus消息总线的组合。

 

二、基础配置

1)build.gradle项目依赖

创建gradle模块config-client-nacos并添加web、actuator监控、alibaba-nacos-discovery与alibaba-nacos-config依赖

dependencies {
   compile group: \'org.springframework.boot\', name: \'spring-boot-starter-web\'

   compile group: \'org.springframework.boot\', name: \'spring-boot-starter-actuator\'

   compile group: \'com.alibaba.cloud\', name: \'spring-cloud-starter-alibaba-nacos-config\', version: \'2.1.0.RELEASE\'

   compile group: \'com.alibaba.cloud\', name: \'spring-cloud-starter-alibaba-nacos-discovery\', version: \'2.1.0.RELEASE\'
}

2)为什么要配置两个配置文件?

  Nacos 同 Spring Cloud Config 在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置后,才能保证项目的正常启动。Spring Boot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application。

bootstrap.yaml:

server:
  port: 7071
spring:
  application:
    name: config-client-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #指定Nacos服务注册中心地址
      config:
        server-addr: 127.0.0.1:8848 #指定Nacos服务配置中心地址
        file-extension: yaml #指定yaml格式的配置(原先GitHub上的配置文件)
View Code

application.yaml:

spring:
  profiles:
    active: dev #表示激活开发环境
View Code

3)启动类ConfigClientNacosApplication.java

package org.wesson.cloudalibaba.nacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientNacosApplication {

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

}
View Code

4)Controller

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动刷新功能:

package org.wesson.cloudalibaba.nacos.controller;

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 // 支持Nacos的动态刷新功能
public class ConfigNacosController {

    @Value("${config.info}")
    private String configInfo;

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

}
View Code

5)在Nacos中添加配置信息

理论,Nacos 中的匹配规则

Nacos 中的 dataid 的组成格式及与 Spring Boot 配置文件中的匹配规则。官方文档链接:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

公式:

${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

用例:

config-client-nacos-dev.yaml

注意:严格按照官网公式,不要让 spring.profile.active 为空,不然会出现莫名其妙的问题。

实操,新建配置

启动 Nacos 服务后,找到配置管理下的配置列表,点击右侧加号:

对应上面公式,设置Data ID,添加如下配置内容信息,之后点击发布:

小总结

更直观的看法如下,这样一来,官网的 dataid 格式就看明确了吧!!!

6)测试

启动前需要在 Nacos 客户端配置列表菜单下有对应的yaml配置文件

Step1:启动 Nacos 服务器

Step2:运行 config-client-nacos 启动类,端口为7071

Step3:调用接口查看配置信息,访问http://localhost:7071/getInfo,结果如下:

成功获取 Nacos 客户端配置列表 config-client-nacos-dev.yaml 配置文件中的内容。

 

三、自带动态刷新配置

  不需要添加任何相关的 Bus 消息总线依赖,直接编辑修改 Nacos 客户端配置列表中的 yaml 配置文件版本发布即可:

点击发布后,会有一个当前值与原始值的对比效果,然后确认发布:

根本不需要重启任何服务以及原先发送的 POST 请求。再次调用查看配置的接口,就会发现配置成功实现动态刷新功能了:

不得不说,阿里巴巴的 Nacos 技术还是还是非常成熟的,相当于完全代替了 Eureka、Config 与 Bus 三个组件。

注意:可以在 properties 配置文件使用 spring.cloud.nacos.config.refresh.enabled=false 设置禁用自动刷新配置功能。或者使用 yaml 格式:

spring:
  cloud:
    nacos:
      config:
        refresh:
          enabled: false
View Code
 

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

springcloud复习3

SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置中心

SpringCloud(Alibaba版)Nacos配置中心

springcloud+nacos+sentinel+dubbo搭建项目的一些关键配置和依赖

SpringCloud(Alibaba版)Sentinel初识篇

spring cloud 服务注册、发现了解