前言
在整个项目中,如果修改每一个微服务的application.yml,那就太痛苦了,怎么办呢?可以把这些配置文件给推到云端,集体管理就行。这时config就起到了作用。
开搞
在分布式系统中,由于服务数量巨大,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件,在spring cloud中,有分布式配置中心组件spring cloud config,他支持配置服务放在配置服务的内存中(即本地),也支持放在GitHub中。
在spring cloud config组件中,分两个角色,一个是config server,一个是config client。
config server 是一个可横向扩展,集中式的配置服务,他用于集中管理应用程序各个环境下的配置,默认使用git存储配置文件内容,也可使用svn或本地存储。
config client是config server的客户端,用于操作存储在config server中的配置内容。
微服务在启动的时候会请求config server获取配置文件内容,请求到后再启动容器。
这东西就是配置中心,把所有的服务配置文件都放在一个代码管理平台上,通过spring cloud config去读取服务对应所需要的配置文件。
1.在现有的springboot项目中创建一个config微服务,并且用的是maven创建的,并且在GitHub中创建一个仓库,私有的公有的都行
2.添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.修改application.yml
server:
port: 9005
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://github.com/*****/*****#git仓库地址
username: *****@qq.com #用户名
password: ***** #密码
skip-ssl-validation: true #不用ssh
label: master #分支
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://127.0.0.1:9001/eureka/,http://127.0.0.1:9002/eureka/
4.修改启动类
@SpringBootApplication
@EnableConfigServer //启用config
@EnableEurekaClient
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class,args);
}
}
5.客户端添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
6.修改被代理的微服务的yml(将原本的application.yml推到github,将本地的application.yml删了之后添加一个bootstrap.yml),值得注意的是那个application.yml的名字必须是{xxx}-{xxx}.yml的形式,这两个东西要和你的配置文件里的name和profile一致
spring:
cloud:
config:
label: master #分支
name: base #名字
profile: dev #后缀
uri: http://127.0.0.1:9005 #config的地址和端口
7.最好是先启动配置中心再启动被代理的微服务,不然微服务会报错。启动之后正常访问端口就行。如果微服务的端口不叫8080,而启动之后显示的是8080那么就是报错了。
8.流程: 要访问的那个路径(端口还是微服务的端口) -> 要访问的那个微服务 -> 微服务的bootstrap.yml -> eureka通过bootstrap中的uri找到springcloud config -> config用bootstrap.yml中的name,profile和label找到git仓库中的base -dev/pro.yml,并拉取 -> 微服务拿到xxx-xxx.yml开始加载 -> 访问路径得到结果
流程图
网友评论