要不解释一下为什么这么久吧?因为鼠标坏了,这个接口好像不至于半个多月。毕竟京东一下子就到了。哎,就是懒,我坦白了。


前言

我想有的人肯定会思考这样一个问题,Spring Cloud 是一个服务集群,这么多服务器,如果我们要修改一下配置就得到各个服务器上去改,这样显得很不聪明,所以Spring Cloud 也是提供了一个配置中心的组件,能够达到集中管理配置的需求。


提示:以下是本篇文章正文内容,下面案例可供参考

一、简介

在分布式系统中,由于服务非常多,配置文件分散在不同的微服务项目中,管理不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在 Spring Cloud 中,提供了 Spring Cloud Config,它支持配置文件放在配置服务的本地,也支持放在远程仓库。
使用Spring Cloud Config配置中心后的架构图:
在这里插入图片描述
配置中心本质也是一个微服务,同样需要注册到Eureka服务注册中心!

二、搭建配置中心服务

目标:创建远程公开git仓库,搭建配置中心微服务config-server

创建git仓库(github)

首先登录github,如果没有账号的话,注册一个然后登录
github
登陆好以后点击create repository 创建仓库
在这里插入图片描述

在这里插入图片描述
点击create a new file 创建一个新的文件
在这里插入图片描述
创建文件的命名方式:{application}-{profile}.properties/yml
application是应用名,如我们的user
profile用于区分开发环境,测试环境,生产环境等
如user-dev.yml,表示用户微服务-开发环境下使用的配置文件
这里将user-service工程的配置文件application.yml文件的内容复制到user-dev.yml中

搭建配置中心config-server

创建新的module:config-server
加入依赖

 <!--    springboot 启动-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--    热启动依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
    </dependency>
    <!--    eureka-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      <version>2.2.5.RELEASE</version>
    </dependency>
    <!--    config-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-config-server</artifactId>
      <version>2.2.5.RELEASE</version>
    </dependency>

创建启动类 org.antry.ConfigServer

@SpringBootApplication
@EnableConfigServer //开启配置服务
public class ConfigServer {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServer.class, args);
    }
}

配置文件 main/resources/application.yml
这里面git的uri在这里获取
在这里插入图片描述

server:
  port: 3001
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: 你的git地址
          skip-ssl-validation: true #跳过ssl验证
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:11111/eureka

测试一下

同样是先启动注册中心eureka,再启动configserver
在这里插入图片描述
在控制台看到启动正常。
随后访问http://127.0.0.1:3001/user-dev.yml
在这里插入图片描述
会报找不到,但是这个和配置没有关系(反正我仔细检查了配置是没有问题,之前我是用的github可以使用,主要就是设置成public,其他默认即可)。既然这边github用不了,所以我决定换gitee(码云)玩玩。
有的人估计要喷了,你tmd不行说个卵子。
哎,年轻人,换个仓库快的很。

创建git仓库(gitee)

大佬,网址给你安排【gitee】,其实我想说百度gitee第一个,特么自己不会百度吗。
啊,对不起,我暴躁了。
请自行注册登录
在这里插入图片描述
这两个加号都能创建仓库
在这里插入图片描述
主要呢就是配置public,其他随便选,目前不重要。
把git的uri换成这个
在这里插入图片描述
依旧是新建一个文件
在这里插入图片描述
还是命名为user-dev.yml,把user-service的配置copy过来,提交,完事。
在这里插入图片描述

再次测试

一样是启动没有报错的话,访问http://127.0.0.1:3001/user-dev.yml
在这里插入图片描述
这下就可以读到了吧。

三、获取配置中心配置

想必到这里,应该可以想到配置中心的作用,就是通过config-srever获取仓库中的配置,供各个服务器使用,不再使用代码中写死的配置。那么我们接下来就来实现它吧。

添加启动器依赖

因为现在要先让user-service工程使用仓库中的配置,所以先在user-sevice的pom中添加依赖

// A code block
  <!--    config-->
<!--start    config-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
      <version>2.2.5.RELEASE</version>
    </dependency>

修改配置文件

删除user-service工程中resources下原本的application.yml,新建一个bootstrap.yml

spring:
spring:
  cloud:
    config:
      #要与仓库中配置文件中的application保持一致
      name: user
      #要与仓库中配置文件中的profile保持一致
      profile: dev
      #要与仓库中所属的分支一样
      label: master
      discovery:
        enabled: true #配置是否发现配置中心
        service-id: config-server #配置中心服务名
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:11111/eureka

这里面的name和profile与仓库中配置文件的命名息息相关。上面提到的创建文件的命名方式:{application}-{profile}.properties/yml,那么仓库中创建的配置文件是user-dev.yml因此name为user,profile为dev
分支的话,我在创建的时候就一个master分支
在这里插入图片描述
其他还有一个配置就是注册到eureka,以及去配置中心拉取配置。

启动测试

同样是启动玩注册中心和配置中心完之后,再启动user-service工程

2021-04-13 10:26:11.954  INFO 3744 --- [  restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://DESKTOP-U7OD3DQ.localdomain:3001/
2021-04-13 10:26:12.700  INFO 3744 --- [  restartedMain] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=user, profiles=[dev], label=master, version=32b9be0a05722ea618ee3bcb290320eb35394ad6, state=null
2021-04-13 10:26:12.702  INFO 3744 --- [  restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-configClient'}, BootstrapPropertySource {name='bootstrapProperties-https://gitee.com/T_Antry/springcloudconfig.git/user-dev.yml'}]

通过启动日志前三行可以看到:
第一行是找到了配置中心
第二行是读到了本地配置中配置的要去读取的配置名称和版本
第三行就通过第二行和第一行拿到的信息去获取到配置。
随后访问http://127.0.0.1:1001/user/13 ,可以看到配置生效了,我们是在仓库中配置的端口生效了。
在这里插入图片描述

四、扯淡

在上面我们已经实现了,user-service的工程读取gitee上的配置,但是这还有个问题,就是没办法实现配置 更新,假设gitee上的配置在user-service工程已经启动之后修改的话,所修改的配置是无效的。原本是打算在这一章节中把内容讲完,但是呢,由于时间拖得比较长,且这个部分还有一部分课外内容需要带入,所以就放到下个章节再介绍一下Spring Cloud bus的内容。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐