四SpringCloudAlibaba-Nacos(配置中心)

1.1.什么是Nacos配置中心

首先我们来看一下,微服务架构下关于配置文件的一些问题:

  • 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。

  • 配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护,这比较困难。

  • 配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。

基于上面这些问题,我们就需要配置中心的加入来解决这些问题,配置中心的思路是:

  1. 首先把项目中各种配置全部都放到一个集中的地方进行统一管理。

  2. 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。

  3. 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。

四SpringCloudAlibaba-Nacos(配置中心)_第1张图片

1.2.Nacos配置中心入门

1.2.1.创建nacos_config

随着微服务拆开的粒度越来越小,配置文件也会越来越多,创建一个nacos_config模块读取Nacos配置中心的配置文件而nacos_config中读取到的配置文件则部署到全局,这样再每个微服务下面的模块就不用重复的写配置文件了

1.2.1.1.pom.xml



    
        springcloud_parent
        com.bjpowernode
        1.0-SNAPSHOT
    
    4.0.0

    nacos_config

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
    

1.2.1.2.bootstrap.yml

  • 注意:

    • 客户端配置文件的名称必须为bootstrap.yml

  • bootstrap/ application 的应用场景:

    • bootstrap.ymlapplicaton.yml 优先加载,应用于系统级别参数配置,一般不会变动;

    • application.yml应用于SpringBoot项目的自动化配置;

  • 案例:

        spring:
          cloud:
            nacos:
              config:
                server-addr: 192.168.204.129:8848
                file-extension: yaml #后缀名,只支持 properties 和 yaml 类型
                prefix: nacos-config #文件名,如果没有配置则默认为 ${spring.appliction.name}

1.2.1.3.App



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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApp {

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

1.2.1.4.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 //重新从BeanFactory获取一个新的实例(该实例使用新的配置)
public class ConfigController {

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;
    @Value("${spring.datasource.type}")
    private String type;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        System.out.println(this);
        String configInfo = driverClassName+"
"+url+"
"+username+"
" +password+"
"+type; return configInfo; } }

1.2.2.往Nacos添加配置信息

1.2.2.1.Nacos的Data ID

  • 在 Nacos 中,dataId(配置文件的命名的规则) 的完整格式如下:

    ${spring.cloud.nacos.config.prefix}.${spring.cloud.nacos.config.file-extension}

  • 说明:

    • spring.cloud.nacos.config.prefix:默认是当前服务的服务名称

    • spring.cloud.nacos.config.file-extension:配置文件的格式(后缀),目前只支持yaml和properties

    • 例如:

       

    • 四SpringCloudAlibaba-Nacos(配置中心)_第2张图片

1.2.2.2.创建配置文件

        1. 新建配置文件

       四SpringCloudAlibaba-Nacos(配置中心)_第3张图片       2. 添加配置文件

            1.填写配置文件名称、格式、内容

       四SpringCloudAlibaba-Nacos(配置中心)_第4张图片

 内容如下:

        server:
          port: 80
        spring:
          cloud:
            nacos:
              discovery:
                server-addr: 192.168.204.129:8848
          application:
            name: nacos-config
          datasource:
            driver-class-name: com.mysql.jdbc.Driver
            url: jdbc:mysql://127.0.0.1:3306/health?characterEncoding=UTF-8
            username: root
            password: 1111
            type: com.alibaba.druid.pool.DruidDataSource

1.2.3.测试

1.启动时加载配置文件

 

 2.修改配置文件后nacos监听到MD5有变化则推送消息给客户端,客户端收到消息后会拉取最新配置(参考 配置管理->监听查询菜单)

3.浏览器访问:http://127.0.0.1/config/info

四SpringCloudAlibaba-Nacos(配置中心)_第5张图片

 总结:根据bootstrap.yml文件中的配置可以找到配置中心中的配置文件,将配置文件存储在C盘中本地目录中则为全局配置。@RefreshScope 这个注解可以动态到获取到配置中心中配置文件的变化,并且再不重启项目的情况下实时更新

你可能感兴趣的:(java,微服务,开发语言)