当前位置:   article > 正文

spring cloud 学习笔记(4):Config-Server统一配置中心搭建_spring cloud config server

spring cloud config server

前言

1、什么是SpringCloud配置中心?

简单来说,就是为了统一管理微服务的配置,好处是日后大规模集群部署服务应用时,
相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护。

2、工作流程

  1. config server先去github/gitee/gitlab等代码托管平台上拉取配置文件到config server,同时config server 为了安全,会在本地存储一份配置(window平台默认是存放在user/APPdata/)
  2. 之后每个微服务在启动时回去config server拉取对应的配置文件信息
    在这里插入图片描述

一、搭建config-server

1、导入依赖

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入统一配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!--这个包是用来做健康监控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--将配置服务注册到eureka上面-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

为什么要引入eureka客户端

是为了把config server统一配置中心也注册到服务中心
这里也可以使用 consulNacos注册中心

因为以后统一配置中心也会是集群部署,所以为了保障高可用性,避免单节点宕机导致整个微服务系统崩溃,同时也是为了实现微服务从config server拉取配置信息时负载均衡

2、开启统一配置中心服务

项目的启动类中添加@EnableConfigServer注解

@EnableConfigServer  //开启统一配置中心服务
@EnableEurekaClient  //Eureka的服务发现
@SpringBootApplication
public class SpringcloudConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudConfigServerApplication.class, args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、修改配置文件

server:
  port: 8888  #服务注册中心端口号
spring:
  application:
    name: config-server  #服务名称id
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/username/config-server.git
          default-label: master  #默认是master 分支
          searchPaths: config   #远程仓库的文件夹地址
          username: username #仓库用户名
          password: password #仓库密码
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka/   #注册中心地址
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注意:
1.uri是在github/gitee上面的仓库地址
2 如果仓库是public,那么不用配置username和password
3 如果是私密仓库,则需要配置username和password,如果不配置,则报错

4、启动服务,拉取远端配置文件

拉取规则 : label/name-profiles.yml |properties |json
label 代表去那个分支获取 默认使用master分支
name 代表读取那个具体的配置文件文件名称
profile 代表读取配置文件环境

例如:gitee远端创建的仓库
在这里插入图片描述
启动server config项目进行拉取
在这里插入图片描述

5、注意点

拉取时必须按照拉取规则:

  • 如果要拉取testServerConfig文件这里要写成testServerConfig-xxxx.yml形式
  • 如果要拉取testServerConfig-dev文件这里要写成testServerConfig-dev.yml形式
  • 如果要拉取testServerConfig-prod文件这里要写成testServerConfig-prod.yml形式

在这里插入图片描述

同时控制台显示已把文件存储到本地/users/AppData目录:

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

二、搭建congfig-client

Config Client其实就是一个个的微服务

1、导入引入config client依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入config client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.编写 bootstrap.yml 配置文件

spring:
  cloud:
    config:
      label: master #指定从仓库的那个分支拉取配置
      name: testServerConfig  #指定拉取配置文件的名称
      profile: pro #指定拉取配置文件的环境
eureka:  #注册中心
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意点:
①由于config server之前我们已经在Eureka服务中心注册,因此需要根据服务id去注册中心获取服务列表,然后根据默认的轮询负载选取一个config-server来获取配置信息,因此需要在配置文件中声明和开启

②在config-client中配置文件不再是application.yml,需要改为bootstrap.yml,这样项目在启动时就不会使用本地的配置文件启动,而是会根据bootstrap的配置去config-server获取指定的yml文件,然后根据获取到的yml文件启动项目

③解决方案:
springcloud 2021.0.6 的“bootstrap.yml配置不生效”
https://blog.csdn.net/wendebin2014/article/details/116082538
https://blog.csdn.net/csxypr/article/details/99707184
添加依赖:

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bootstrap</artifactId>
 </dependency>
  • 1
  • 2
  • 3
  • 4

3. 启动项目

发现控制台有拉取信息,是从gitee仓库拉取的pro结尾的配置文件
在这里插入图片描述
在这里插入图片描述

再看注册中心:发现config-client服务已经成功注册,并且端口时我们pro配置文件的9999端口
在这里插入图片描述

4.整合Spring Cloud Bus实现配置自动刷新

并且只要我们在gitee/github上面更改了配置文件,并保存,那么Config会自动拉更新配置文件

在这里插入图片描述
但是我们config client(即微服务)此时不能感知到配置文件的变化,需要重启后或者向每一个微服务手动发送一个POST请求才会更新配置文件
在生产环境中,微服务可能非常多,每次修改完远端配置之后,不可能对所有服务进行重新启动或者发送一个POST请求!!这样会影响微服务系统的维护效率

有没有办法能够让服务能够刷新远端修改之后的配置,从而不要每次重启服务才能生效呢??
在springcloud中也为我们提供了Bus组件来实现自动刷新配置.
详细请看:Spring Cloud Bus实现配置自动刷新

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/84105
推荐阅读
相关标签
  

闽ICP备14008679号