要不解释一下为什么这么久吧?因为鼠标坏了,这个接口好像不至于半个多月。毕竟京东一下子就到了。哎,就是懒,我坦白了。
文章目录
- 前言
- 一、简介
- 二、搭建配置中心服务
- 创建git仓库(github)
- 搭建配置中心config-server
- 测试一下
- 创建git仓库(gitee)
- 再次测试
- 三、获取配置中心配置
- 添加启动器依赖
- 修改配置文件
- 启动测试
- 四、扯淡
前言
我想有的人肯定会思考这样一个问题,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的内容。