SpringCloudConfig分布式配置中心
简介
分布式系统面临的问题:微服务意味着要将单个应用拆分成一个个子服务,每一个服务的颗粒度相对较小,因此系统出现大量的服务。由于每个服务都需要配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决问题
是什么
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务的所有环境提供了一个中心化的外部配置
怎么玩
SpringCloud Config 分为服务端和客户端
- 服务端也成为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供配置信息,加密/解密信息等访问接口
- 客户端则是通过指定配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息
- 配置服务器默认采用git来存储配置信息,这样有助于环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
作用
集中管理配置文件
不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取自己的配置信息
当发生配置变化时,服务不需要重启即可感知到配置变化并应用新的配置信息
将配置信息以REST接口的形式暴露
与gitHub整合配置
由于SpringCloudConfig默认使用git来存储配置文件(也有其他方式比如SVN和本地文件),但是最推荐的还是GIT,而且使用的是http/https访问形式
远程git仓库创建步骤
1、github上新建一个mycloud-config项目
2、获得一个ssh协议的git地址git@github.com:XXXXXX/mycloud-config.git
3、在本地创建一个git仓库并clone,本地地址H:\git\mySpringCloud,执行
$ git clone git@github.com:XXXXXXX/mycloud-config.git
4、新建一个application.yml utf-8编码
spring:
profiles:
active:
- dev
---
spring:
profiles: dev
application:
name: mycloud-config-dev
---
spring:
profiles: test
application:
name: mycloud-config-test
H:\git\mySpringCloud\mycloud-config\.git\config 中添加
[user]
email=XXXXX@126.com
name=XXXX
$ git config --global user.name “your_username” #设置用户名
$ git config --global user.email “your_registered_github_Email” #设置邮箱地址(建议用注册giuhub的邮箱)
5、git status查看多了一个文件
使用命令提交的master
$ git add .
$ git commit -m "init file"
$ git push origin master
成功提交
创建本地工程
1、新建项目mycloud-config-3344,添加依赖
<dependencies>
<!-- springCloud Config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- 避免Config的Git插件报错:org/eclipse/jgit/api/TransportConfigCallback -->
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>4.10.0.201712302008-r</version>
</dependency>
<!-- 图形化监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 熔断 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 热部署插件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
2、添加application.yml,这里uri使用http地址
server:
port: 3344
spring:
application:
name: mycloud-config
cloud:
config:
server:
git:
uri: https://github.com/XXXXX/mycloud-config.git
3、主启动类添加注解@EnableConfigServer
@SpringBootApplication
@EnableConfigServer
public class SpringCloudConfig3344 {
public static void main(String[] args)
{
SpringApplication.run(SpringCloudConfig3344.class, args);
}
}
4、hosts文件增加映射127.0.0.1 config-3344.com
5、启动项目,访问http://config-3344.com:3344/application-dev.yml和http://config-3344.com:3344/application-test.yml
访问方式