spring cloud config 从0到1

2017-11-09 10:46:19来源:oschina作者:twsghxs人点击

分享
一、简介
1.为什么要配置中心?

一个应用中不只是代码,还需要连接资源和其它应用,经常有很多需要外部设置的项去调整应用行为,如切换不同的数据库,设置功能开关等。


随着系统微服务的不断增加,首要考虑的是系统的可伸缩、可扩展性好,随之就是一个配置管理的问题。各自管各自的开发时没什么问题,到了线上之后管理就会很头疼,到了要大规模更新就更烦了。
配置中心就是一个比较好的解决方案,下图就是一个配置中心的解决方案:


配置中心解决方案


常见的配置中心的实现方法有:


硬编码(缺点:需要修改代码,风险大)
放在xml等配置文件中,和应用一起打包(缺点:需要重新打包和重启)
文件系统中(缺点:依赖操作系统等)
环境变量(缺点:有大量的配置需要人工设置到环境变量中,不便于管理,且依赖平台)
2.什么是spring cloud config?

在分布式系统中,spring cloud config 提供一个服务端和客户端去提供可扩展的配置服务。我们可用用配置服务中心区集中的管理所有的服务的各种环境配置文件。配置服务中心采用Git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理。


Spring Cloud Config就是云端存储配置信息的,它具有中心化,版本控制,支持动态更新,平台独立,语言独立等特性。其特点是:


提供服务端和客户端支持(spring cloud config server和spring cloud config client)
集中式管理分布式环境下的应用配置
基于Spring环境,无缝与Spring应用集成
可用于任何语言开发的程序
默认实现基于git仓库,可以进行版本管理
可替换自定义实现
3.spring cloud config的结构是什么?

spring cloud config包括两部分:


spring cloud config server 作为配置中心的服务端
拉取配置时更新git仓库副本,保证是最新结果
支持数据结构丰富,yml, json, properties 等
配合 eureke 可实现服务发现,配合 cloud bus 可实现配置推送更新
配置存储基于 git 仓库,可进行版本管理
简单可靠,有丰富的配套方案
Spring Cloud Config Client 客户端
Spring Boot项目不需要改动任何代码,加入一个启动配置文件指明使用ConfigServer上哪个配置文件即可

Spring Cloud Config的原理如图所示:


真正的数据存在Git等repository中,Config Server去获取相应的信息,然后开发给Client Application,相互间的通信基于HTTP,TCP,UDP等协议。


二、初级使用

使用spring cloud config需要先搭建一个config server,然后在config client中获取配置信息。


原理图如下所示:



1.构造config server
(1) 创建spring boot项目,在pom.xml中添加依赖

org.springframework.boot
spring-boot-starter-parent
1.5.6.RELEASE


UTF-8
UTF-8
1.8




org.springframework.cloud
spring-cloud-dependencies
Dalston.SR3
pom
import





org.springframework.cloud
spring-cloud-config-server


(2) 在程序的入口Application类加上@EnableConfigServer注解
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
(3) 添加如下配置

在bootstrap.yml中添加配置:


spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: http://gitlab.fishtrip.cn/java/config-repository.git
username: ***
password: ***
default-label: master
search-paths: java*,ruby*,go*
server:
port: 9992
(4) 启动程序

经过上面的配置之后,启动程序,就启动了一个简单的spring cloud config server。


因为在上面的配置仓库中有一个zeus-dev.yml配置文件,配置内容如下:


env: alpha

http://localhost:9992/zeus/dev config可以看到如下展示,表示config-server启动成功:


启动成功图

URL与配置文件的映射关系如下:


/{name}/{profiles:.[^-].}
/{name}/{profiles}/{label:.*}
/{name}-{profiles}.yml
/{label}/{name}
/{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.json

上面的url会映射{application}-{profile}.yml对应的配置文件,{label}对应git上不同的分支,默认为master。


通过浏览器可以查看json格式,yml格式和propertis格式。


2.构造config client

构造一个config-client项目,去使用config-server中的配置。


(1) pom.xml文件中添加maven依赖

org.springframework.boot
spring-boot-starter-parent
1.5.6.RELEASE


UTF-8
UTF-8
1.8




org.springframework.cloud
spring-cloud-dependencies
Dalston.SR3
pom
import





org.springframework.cloud
spring-cloud-starter-config


(2) 在application.properties文件中添加相关配置
spring:
profiles: dev
cloud:
config:
label: master
uri: http://localhost:9992/
(3) 使用配置
@Value("${env}")
String env;
@RequestMapping(value = "/hi")
public String hi(){
return env;
}

启动config-client之后,访问上面的接口http://localhost:8881/hi 直接返回alpha


三、高级使用
1.使用Spring Security进行安全控制

如果觉得直接访问config-server的url不安全,可以使用Spring Security进行安全控制 。


(1) config-server端配置

pom加入依赖:



org.springframework.boot
spring-boot-starter-security

bootstrap.yml文件中加入:


security:
user:
name: fish
password: fish

重新启动后进入页面的时候要求输入用户名和密码



(2) config-client端配置

config-client需要在配置文件中添加验证信息:


spring:
profiles: dev
cloud:
config:
label: master
username: fish
password: fish
uri: http://localhost:9992/
2.配置中心微服务化、集群化

原理图如下所示:


Spring Cloud Config的原理图


(1) 准备eureka-server


org.springframework.cloud
spring-cloud-starter-eureka-server




spring:
application:
name: eureka-server
server:
port: 9991
eureka:
client:
service-url:
defaultZone: http://localhost:9991/eureka/
fetch-registry: false
register-with-eureka: false
(2) 改造config-server

修改pom文件,添加maven依赖



org.springframework.cloud
spring-cloud-starter-eureka

在程序的入口Application类加上@EnableEurekaClient或者@EnableDiscoveryClient注解


修改配置文件,将其注册到eureka-server服务


spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: http://gitlab.fishtrip.cn/java/config-repository.git
username: ***
password: ***
default-label: master
search-paths: java*,ruby*,go*
server:
port: 9992
eureka:
client:
service-url:
defaultZone: http://localhost:9991/eureka/
(3) 改造config-client

修改pom文件,添加maven依赖



org.springframework.cloud
spring-cloud-starter-eureka

在程序的入口Application类加上@EnableEurekaClient或者@EnableDiscoveryClient注解


修改配置文件,将其注册到eureka-server服务


spring:
profiles: dev
cloud:
config:
label: master
username: fish
password: fish
discovery:
enabled: true
service-id: config-server
eureka:
client:
service-url:
defaultZone: http://localhost:9991/eureka/

这时发现,在读取配置文件不再写ip地址,而是服务名,这时如果配置服务部署多份,通过负载均衡,从而高可用。


(4)启动

访问eureka-server的服务器,可以看到config-server和config-client同时都注册在上面:


四、参考链接

http://tech.lede.com/2017/06/12/rd/server/springCloudConfig/
http://www.cnblogs.com/ityouknow/p/6931958.html

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台