分布式配置中心简介
问题:
在分布式系统中,由服务数量非常多,配置文件分散在不同的微服务中,管理起来不方便。那要如何进行集中式管理,,这就需要分布式配置中心组件了。
在Spring Cloud中,提供了Spring Cloud Config,它支持配置文件放在配置服务的本地,也支放在远程Git仓库(GitHub,码云)。
架构框架如下图:
注:配置中心本质上也是一个微服务,也要注册到Eureka中。
案例实战
环境:IDEA、Window、gitee
需求:通过远程仓库对服务提供者进行配置
准备工作:
- 在Gitee创建远程仓库(或用已有的仓库)
- 创建配置文件
注意命名的方式:{application}–{profile}.yml或.propreties
- application为应用名称
- profile用于区分开发环境、测试环境、生产环境等
本文使用的文件:
该文件内容复制之前的服务提供者(user-service)的application.yml内容:
一、搭建配置中心微服务
1. 创建配置项目
项目名:config-server
注意要在启动类中加上@EnableConfigServer注解,表示开启配置服务
2. 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
3. 编写配置
server:
port: 12000
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/try-yue/my_config.git
eureka:
client:
server-url:
defaultZone: http://127.0.0.1:10086/eureka
说明:git.uri:是自己的仓库
4. 启动测试:localhost:12000/user-dev.yml
二、 获取配置中心配置
1. 在user-service工程中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2. 修改配置
将原先的application.yml删除,创建新的bootstrap.yml(后面会讲两者区别),配置如下:
spring:
cloud:
cofig:
name: user #要与仓库中 的配置文件的application保持一致
profile: dev #要与仓库中 的配置文件的profile保持一致
label: master ##要与仓库中 的配置文件所属的版本(分支)一样
discovery:
enabled: true #使用配置中心
service-id: config-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
说明:name-proflie-label如下图说明
bootstrap.yml 和 application.yml 区别:
简单来说:
- bootstrap相当于项目启动是的引导文件,内容是相对固定的,而application是微服务的一些配置参数,也就是变化比较频繁。
- 并且bootstrap更早于application加载。
- bootstrap.yml同名属性会被application.yml覆盖;application.yml在application.properties之前加载,同名属性会被application.properties覆盖