使用 SpringCloudConfig 进行分布式配置:存储库后端类型
3.构建服务器应用程序
笔者已经创建了一个示例配置存储库,它可以在以下 GitHub 地址找到:
https://github . com/piomin/sample-spring-cloud-config-repo.git.
在该存储库中放置了本章第一个示例所使用的所有属性源,其中说明了在不同发现区域中运行的客户端应用程序的原生配置文件支持。现在,该存储库保存了此列表中可见的文件,如图 5.3 所示。
Spring Cloud Config Server 默认会在第一次 HTTP 资源调用后尝试克隆存储库。如果要在启动后强制克隆它,则应将 cloneOnStart 属性设置为 true。除此之外,还需要设置存储库连接设置和账户身份验证凭据。
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri :https://github . com/piomin/ sample-spring-cloud-config-repo.git
username: ${gi thub。username }
password: $ {github. password }
cloneOnStart: true
运行该服务器之后,我们可以调用之前练习中已知的端点,如 ht/o/alos/8889/client- service/zone1 或 ht:/oca/hos/888/eclient-servicec zone2.yml。其结果与前面的测试结果相同,唯一的区别在于数据源。
现在可以来进行另一项练习。在之前的示例中,由于采用了发现优先引导方法,并且启用了 native 配置文件,所以该示例需要对客户端的属性略作修改。现在因为使用的是 Git 后端,所以,可以针对这种情况开发更智能的解决方案。在当前的方法中,开发人员应该在 GitHub 上的配置库中创建 discovery 分支
tps:/ihub.o/pioin/samoplrep spring- cloud- config rep:/ree/discovery),然后再把专用于该应用程序的文件放上去(该应用程序将演示发现优先引导机制)。如果将 label 参数设置为 discovery 然后再调用 Config Server 端点,则它将从新分支中获取数据。开发人员可以尝试分别调用 ht:/ahost:8889/client-service/zone l/discovery 和 htpt//ocalhost/889/dicovery/cient-servicc -zone2.yml,然后检查和对比其结果。
现在来考虑另一种情况。假设已经更改了 client-service 第三个实例的服务器端口,但由于某种原因,想要回到之前的值。那么,是否必须更改并提交 client-service zone3.yml 才能使用先前的端口值呢?答案是不必,现在开发人员所要做的就是在调用 HTTP API 资源时将提交 ID 作为 label 参数传递。已经执行的更改如图 5.4 所示。
![使用 SpringCloudConfig 进行分布式配置:存储库后端类型](https://img-blog.csdnimg.cn/
img_convert/69019ab18499de2db6d5cf981b8bebcb.png)
如果使用父提交 ID 而不是分支名称调用 API 端点,则将返回旧端口号作为响应。图 5.4 是调用 htpt::o//os:/88/e5/dd6/elient-servce-zone3.yiol 的结果,其中,e546dd6 就是以前提交的 ID。
eureka:
client:
serviceUrl :
defaultZone: http://localhost:8761/eureka/
instance :
metadataMap :
zone: zone 3
server :
port: 8083
4.客户端配置
在使用 Git 后端构建服务器端时,仅演示了 HTTP 资源调用的示例。以下是客户端应用程序的示例配置。开发人员也可以在 spring.profiles.active 运行参数中传递它,而不是在 bootstrap.yml 中设置 profile 属性。此配置将使客户端可以从 discovery 分支获取属性。开发人员也可以决定通过在 label 属性中设置它来切换到某个提交 ID,这在前面已经介绍过。
spring:
application:
name: client-service
cloud:
config:
uri: http://localhost:8889
profile: zone1
label: discovery
label: e546dd6 //取消代码注释即可回滚
5.多个存储库
开发人员有时可能需要为单台配置服务器配置多个存储库。例如,可以想到的一种情况是:必须将业务配置与典型技术配置分开,这绝对是有可能的。
spring:
cloud:
config:
server:
git:
uri:
https://github. com/piomin/spring-cloud-config-repo/ config-repo
repos:
simple: https://github. com/simple/config-repo
special:
pattern: special*/dev*, *special* /dev*
uri: https://github . com/ special/config-repo
评论