背景
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。Spring Cloud提供了ConfigServer
来解决这个问题,我们每一个微服务自己带着一个application.yml
,上百个配置文件的管理…….
用途
Spring Cloud Config
是代理通讯的一个角色,为微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。分为服务端与客户端。
详细用法:连接GIT,将本地的配置提交到git上,如果spring cloud config
检测文件发生变化,则进行通知各个服务进行更新配置文件。微服务不需要重启。所以的配置信息以rest方式进行暴露出来,由rest接口进行调用
服务端
服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
如何集成?
服务端配置
1、在git上创建仓库,克隆到本地与远程仓库进行连接
2、创建config配置文件。//注意:一定要确保在git上的文件数据不存在乱码或者特殊字符空格等等,否则会报错的。需要保存的时候使用编码为UTF-8。如果有问题可以在git上再进行编辑一下,确保无问题
spring:
profiles:
active:
- dev
---
spring:
profiles: dev
#开发环境
application:
name: microservicecloud-config-dev
---
spring:
profiles: test #测试环境application:
name: microservicecloud-config-test #排请保存为UTF-8格式
git status
git add .
git commit -m "文件信息"
git push orgin master
3、创建config微服务,修改POM文件。配置文件默认端口:3344
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
4、修改config微服务配置文件
server:
port: 3344
spring:
application:
name:microservicecloud-config-cloud:
config:
server:
git:
uri: https://github.com/wangsh6379/springcloud_config.git #GitHub上面的git仓库地址
5、修改主配置类,启动config注解
@EnableConfigServer
6、启动config微服务访问,获取git远程库配置,可设置默认配置,如果没有匹配上即可获取默认配置
dev环境:http://URL:PORT/application-dev.yml
test环境:http://URL:PORT/application-test.yml
7、在Config中访问配置文件的多种方式:
1、http://URL:PORT/application-dev.yml
2、http://URL:PORT/application/dev/master #携带分支
3、http://URL:PORT/master/application-dev.yml
客户端配置?
1、在config的git仓库中创建client配置文件
spring:
profiles:
active:
- dev
---
server:
port: 8201 # 端口
spring:
profiles: dev
application:
name: config-client
eureka:
client:
service-url:
defaultZone: http://localhost-dev:8761/eureka/
---
server:
port: 8202 # 端口
spring:
profiles: test
application:
name: config-client
eureka:
client:
service-url:
defaultZone: http://localhost-test:8761/eureka/
2、创建client微服务。修改pom文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config</artifactId>
</dependency>
3、创建bootstrap.yml修改配置文件
spring:
cloud:
config:
name: config-client #这里的name要与git上的资源名称相同,注意没有yml后缀名profile: dev #本次访问的配置项
label: master #分支名称
uri: http://config-3344.com:3344 #本微服务启动后先去找SERVER服务,通过SpringCloudconfig获取GitHub的服务地址
4、创建appcaliton.yml配置文件
spring:
application:
name: config-client
5、代码,根据config-client去3344的服务中获取git路径,再根据配置文件名称找到所需要的配置,将配置获取
@RestController
public class ConfigClientRest{
@Value("${spring.application.name}")
private String applicationName;
@Value("${eureka.client.service-url.defaultZone}")
private String eurekaServers;
@Value("${server.port}")
private String port;
@RequestMapping("/config")
public String getConfig(){
String str = "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port;
System.out.println("******str: " + str);
return "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port;
}
}
bootstrap.yml
是什么?
applicaiton.yml
是用户级的资源配置项bootstrap.yml
是系统级的,优先级更加高
Spring Cloud会创建一个’Bootstrap Context’,作为Spring应用的Application Context的父上下文。初始化的时候,'Bootstrap Context
负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的’Environment
Bootstrap
属性有高优先级,默认情况下,它们不会被本地配置覆盖。Bootstrap context和
Application Context有着不同的约定,
所以新增了一个bootstrap.yml'文件,保证
Bootstrap Context和
Application Context`配置的分离。
如何在现有的Eureka或者微服务修改成Config
配置版本?
1、创建bootstrap.yml配置文件
spring:
cloud:
config:
name: config-client-eureka #这里的name要与git上的资源名称相同,注意没有yml后缀名profile: dev #本次访问的配置项
label: master #分支名称
profile: test #这个决定获取git仓库文件的环境配置
uri: http://config-3344.com:3344 #本微服务启动后先去找SERVER服务,通过SpringCloudconfig获取GitHub的服务地址
2、创建application.yml配置文件。
spring:
application:
name: config-client-eureka # 此配置信息全部从config连接的git仓库中获取
2、访问Eureka,如果可以成功启动则可以成功。
策略切换
在git仓库中修改配置文件上传git,然后在项目不修改任何文件的前提去自动获取。不应该在微服务中修改配置文件已达到切换环境的做法。
SpringCloud 系列代码开源地址:代码地址
SpringCloud 技术群聊地址:Q群地址