SpringCloud Nacos配置中心

1 配置中心介绍

1.1、配置中心介绍

问题

微服务架构下关于配置文件的问题:
在这里插入图片描述

  • 配置文件相对分散

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

  • 配置文件无法区分环境

微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动

维护,这比较困难。

  • 配置文件无法实时更新

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

配置中心的思路是:

  • 首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。
  • 服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。
  • 配置中心参数有更新时,能够通知到微服务实时同步最新的配置信息,使之动态更新。

1.2、常见配置中心

1.2.1、Apollo

Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰度发布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。并且资料 也写的很详细。

1.2.2、Disconf

Disconf是由百度开源的分布式配置中心。基于Zookeeper实现配置变更后实时通知和生效。

1.2.3、SpringCloud Config

Spring Cloud的配置中心组件。和Spring无缝集成,使用起来非常方便,配置存储支持Git。不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。要结合SpringCloud Bus和消息队列才能完成配置实时刷新的功能。

1.2.4、Nacos

SpingCloud alibaba技术栈中的一个组件,前面我们已经使用它做过服务注册中心。其实它也集成了服务配置的功能,我们可以直接使用它作为服务配置中心。

2 基本配置和多环境配置

2.1、创建测试Controller

2.1.1、创建测试控制器

在service-sms微服务中创建SampleController

使用@Value读取配置信息

package com.atguigu.guli.service.sms.controller;
@RestController
@RequestMapping("/sms/sample")
public class SampleController {
    @Value("${aliyun.sms.signName}")
    private String signName;
    @GetMapping("test1")
    public R test1(){
        return R.ok().data("signName", signName);
    }
}

测试:http://localhost:8150/sms/sample/test1

2.1.2、测试2

使用@ConfigurationProperties读取配置信息

@Autowired
private SmsProperties smsProperties;
@GetMapping("test2")
public R test2(){
    return R.ok().data("smsProperties", smsProperties);
}

测试:http://localhost:8150/sms/sample/test2

2.2、接入配置中心

参考文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md

2.2.1、service中添加依赖

<!--配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.2.2、创建bootstrap.yml配置文件

bootstrap作为引导文件会优先于application文件的加载

spring:
  application:
    name: service-sms
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式,如果是properties文件则不用配置此项
  • bootstrap文件先于application加载
  • properties的配置覆盖yml的配置
  • application的配置覆盖bootstrap的配置

2.2.3、在nacos中添加配置

在这里插入图片描述

2.2.4、填写配置信息

  • Data ID: service-sms.yaml
    在这里插入图片描述

    • 服务名.文件格式
  • **配置内容:**删除或注释本地的bootstrap.yml中的内容

server:
 port: 8150 # 服务端口
spring:
#  profiles:
#    active: dev # 环境设置
#  application:
#    name: service-sms # 服务名
 cloud:
   nacos:
     discovery:
       server-addr: localhost:8848 # nacos服务地址
#spring:
 redis:
   host: 192.168.100.100
   port: 6379
   database: 0
   password: 123456 #默认为空
   lettuce:
     pool:
       max-active: 20  #最大连接数,负值表示没有限制,默认8
       max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1
       max-idle: 8     #最大空闲连接,默认8
       min-idle: 0     #最小空闲连接,默认0
#阿里云短信
aliyun:
 sms:
   regionId: cn-hangzhou
   keyId: 你的id
   keySecret: 你的secret
   templateCode: 你的code
   signName: 谷粒

2.2.5、测试

重新启动service-sms测试从配置中心读取配置信息

2.2.6、配置中心优先

在这里插入图片描述
在这里插入图片描述

如果配置中心和当前应用的配置文件中都配置了相同的项目,优先使用配置中心中的配置

在这里插入图片描述

2.3、配置动态刷新

如果修改了配置中心的配置,我们的程序无法读取到实时的配置信息,需要重新启动服务器,因此可以配置动态刷新。

2.3.1、添加注解

在controller类上配置下面的注解,并重启服务器

@RefreshScope

2.3.2、修改配置

修改nacos注册中心的配置信息,无需重新启动服务器,配置即可生效

2.4、多环境配置

2.4.1、添加active属性

在bootstrap.yml中添加如下配置

#spring:  
  profiles:
    active: dev # 环境标识,test、prod等

2.4.2、添加配置配置文件

配置中心添加 service-sms-dev.yaml 配置文件,文件最后一部分的名字和环境标识保持一致

#阿里云短信
aliyun:
 sms:
   signName: 谷粒dev

3 命名空间和配置分组

3.1、使用命名空间做环境隔离

3.1.1、创建命名空间

在这里插入图片描述

3.1.2、克隆配置文件

在public命名空间中克隆文件到新的命名空间

在这里插入图片描述

3.1.3、配置命名空间

默认情况下微服务读取配置中心中 public 命名空间中的配置文件,可以指定命名空间id使用特定命名空间中的配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2、使用命名空间做微服务隔离

3.2.1、创建多配置文件

在这里插入图片描述

在这里插入图片描述

3.3、使用分组

3.3.1、创建分组

在这里插入图片描述

在这里插入图片描述

3.3.2、配置分组名称

在这里插入图片描述

3.4、几个概念

3.4.1、命名空间

Namespace:命名空间可用于进行不同环境的配置隔离。可以按环境隔离,也可以按微服务隔离。

3.4.2、配置集

Data:所有配置的集合,在系统中,一个配置文件通常就是一个配置集。

3.4.3、配置集ID

Data ID:nacos中的配置文件名称,规范:微服务名称-环境名称.扩展名

3.4.4、配置分组

默认所有的配置集都属于DEFAULT_GROUP分组,不同的分组中可以有相同的配置文件名称。

猜你喜欢

转载自blog.csdn.net/ZGL_cyy/article/details/113621565