要不解释一下为什么这么久吧?因为鼠标坏了,这个接口好像不至于半个多月。毕竟京东一下子就到了。哎,就是懒,我坦白了。
我想有的人肯定会思考这样一个问题,Spring Cloud 是一个服务集群,这么多服务器,如果我们要修改一下配置就得到各个服务器上去改,这样显得很不聪明,所以Spring Cloud 也是提供了一个配置中心的组件,能够达到集中管理配置的需求。
提示:以下是本篇文章正文内容,下面案例可供参考
在分布式系统中,由于服务非常多,配置文件分散在不同的微服务项目中,管理不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在 Spring Cloud 中,提供了 Spring Cloud Config,它支持配置文件放在配置服务的本地,也支持放在远程仓库。
使用Spring Cloud Config配置中心后的架构图:
配置中心本质也是一个微服务,同样需要注册到Eureka服务注册中心!
目标:创建远程公开git仓库,搭建配置中心微服务config-server
首先登录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中
创建新的module:config-server
加入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
true
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
2.2.5.RELEASE
org.springframework.cloud
spring-cloud-config-server
2.2.5.RELEASE
创建启动类 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不行说个卵子。
哎,年轻人,换个仓库快的很。
大佬,网址给你安排【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
org.springframework.cloud
spring-cloud-starter-config
2.2.5.RELEASE
删除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的内容。