什么是spring cloud?
Spring cloud为用户提供了一整套快速开发分布式应用的解决方案,包括配置管理,服务发现,断路开关,智能路由,微代理,控制总线,一次token,全局锁,leader选举,分布式session,集群状态等功能。spring boot作为spring cloud等基础应用,可以快速搭建一个微服务。
spring boot会有很多配置属性,在bootstrap或者application.properties中,区别不大,但是一般系统级别的配置在bootstrap中。
那么问题来了,每个人都修改配置文件,势必引起冲突或者不稳定,利用微服务思想,我们把配置中心也设计成一个微服务。
配置中心有两种方式:
但是无论那种方式都要保证高可用。配置中心的所有属性客户的和服务端都可以使用。
主要配置如下:
server.port=9090
spring.cloud.config.server.native.searchLocations=file://${user.home}/CentralRepo/
SPRING_PROFILES_ACTIVE=native
spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
spring.cloud.config.server.git.searchPaths=respo
spring.cloud.config.label=master
spring.cloud.config.server.git.username=your username
spring.cloud.config.server.git.password=your password
上面两点保证微服务遵守了约定:
Build just once and deploy it in any environment.
一次build,永久部署
参考:https://dzone.com/articles/microservices-and-spring-cloud-config-server
关于git webhooks
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
由于config server不提供高可用实现,一般做法有以下两种:
这个就是使用一个负载均衡设备来隐藏后面的配置服务器集群,这是很容易想到的,不过Spring Cloud给我另一种实现,那就是服务化配置中心。
也就是把配置中心也注册到Eureka-Server上称为一个服务,这样,就和其他普通的服务一样做到了多实例,负载均衡,当然也做到了高可用,还有其他的一些功能特性,比如,熔断降级啊,失败策略等。如下图所示,一般采用下面的应用:
zookeepr采用namespace体系,存储任意数据,监听机制等等,config server的优势是与spring紧密结合,利用spring抽象的
我们的项目中配置了分布式config server,但是并没有启用,还是应用的本地配置文件,bootstrap中的配置如下:
spring.cloud.config.uri= @config.url@
spring.cloud.config.enabled=true
[email protected]@
spring.cloud.config.profile=config
[email protected]@
如果注销第一行,启动日志如下:
2018-09-10 18:13:14.837 INFO 19893 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888
2018-09-10 18:13:14.929 WARN 19893 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/big-goose-card-web-server/config/dev": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
2018-09-10 18:13:14.930 INFO 19893 --- [ main] com.puhui.goosecard.BootApplication : The following profiles are active: dev
发现没有配置,默认连接本地8888端口,如果启用第一行,日志如下:
2018-09-10 18:16:14.471 INFO 19923 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://p.config.pub.puhuifinance.com
2018-09-10 18:16:15.715 WARN 19923 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://p.config.pub.puhuifinance.com/big-goose-card-web-server/config/dev": p.config.pub.puhuifinance.com; nested exception is java.net.UnknownHostException: p.config.pub.puhuifinance.com
2018-09-10 18:16:15.718 INFO 19923 --- [ main] com.puhui.goosecard.BootApplication : The following profiles are active: dev
dev
true
dev
http://p.config.pub.puhuifinance.com
dev
io.springfox
springfox-swagger-ui
2.5.0
test
test
http://p.config.pub.puhuifinance.com
test
io.springfox
springfox-swagger-ui
2.5.0
production
production
http://p.config.pub.puhuifinance.com
production