当前位置: 首页 > 科技观察

SpringCloud构建微服务架构:分布式配置中心【Dalston版】

时间:2023-03-11 22:00:31 科技观察

SpringCloudConfig是SpringCloud团队新创建的项目,为分布式系统提供集中式外部基础设施和微服务应用的配置支持,分为两部分:服务器和客户端。服务端也称为分布式配置中心,是一个独立的微服务应用,用于连接配置仓库,为客户端获取配置信息、加解密信息等提供访问接口;而客户端是一个微服务架构,系统中的每个微服务应用或基础设施通过指定的配置中心管理应用资源的业务相关配置内容,并在启动时从配置中心获取配置信息并加载。SpringCloudConfig在服务端和客户端实现了环境变量和属性配置的抽象映射,因此除了使用Spring构建的应用程序外,它还可以用于任何其他语言运行的应用程序。由于SpringCloudConfig实现的配置中心默认使用Git来存储配置信息,因此使用SpringCloudConfig构建的配置服务器自然支持微服务应用配置信息的版本管理,可以通过Git客户端工具轻松管理和访问配置内容。当然,它也提供了对其他存储方式的支持,比如:SVN仓库,本地化文件系统。在本文中,我们将学习如何基于Git存储构建分布式配置中心,并对客户端进行改造,使其能够从配置中心获取配置信息并绑定到代码的全过程。准备配置仓库准备一个git仓库,可以在码云或者Github上创建。比如本文准备的仓库示例:http://git.oschina.net/didispace/config-repo-demo假设我们读取配置中心的应用名称为config-client,那么我们可以设置默认配置项目在git仓库文件config-client.yml:info:profile:default为了演示加载不同环境的配置,我们可以在git仓库中为dev环境再创建一个配置文件config-client-dev.ymlrepository:info:profile:dev搭建配置中心通过SpringCloudConfig搭建分布式配置中心非常简单。只需要三步:创建一个基础的SpringBoot工程,命名为:config-server-git,在pom.xml中引入如下依赖(省略parent和dependencyManagement部分):org.springframework。cloudspring-cloud-config-server创建SpringBoot程序的主类,并添加@EnableConfigServer注解开启Spring的server功能云配置。@EnableConfigServer@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){newSpringApplicationBuilder(Application.class).web(true).run(args);}}在application中添加配置服务的基本信息和Git仓库的相关信息.yml,例如:springapplication:name:config-servercloud:config:server:git:uri:http://git.oschina.net/didispace/config-repo-demo/server:port:1201去这里用一个SpringCloudConfig实现并使用Gi??t管理配置内容的分布式配置中心已经完成。我们可以先启动应用,确保没有产生错误,再尝试下面的内容。如果我们的Git仓库需要权限访问,可以通过配置以下两个属性来实现;spring.cloud.config.server.git.username:访问Git仓库的用户名spring.cloud.config.server.git.password:访问Git仓库的用户密码完成这些准备后,我们就可以直接访问我们的配置了通过浏览器、POSTMAN或CURL等工具获取内容。访问配置信息的URL与配置文件的映射关系如下:/{application}/{profile}[/{label}]/{application}-{profile}.yml/{label}/{application}-{轮廓}。yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties上面的URL会映射{application}-{profile}.properties对应的配置文件,其中{label}对应到Git不同分支上的不同分支,默认是master。我们可以尝试构造不同的url来访问不同的配置内容。例如访问master分支,即config-client应用的dev环境,可以访问这个url:http://localhost:1201/config-client/dev/master,得到如下返回:{"name":"config-client","profiles":["dev"],"label":"master","version":null,"state":null,"propertySources":[{"name":"http://git.oschina.net/didispace/config-repo-demo/config-client-dev.yml","source":{"info.profile":"dev"}},{"name":"http://git.oschina.net/didispace/config-repo-demo/config-client.yml","source":{"info.profile":"default"}}]}我们可以看到Json返回了应用名称:config-client,环境名称:dev,分支名称:master,以及default环境和dev环境的配置内容。施工委托方完成上述验证后,确定配置服务中心运行正常。接下来,我们尝试获取微服务应用中的上述配置信息。创建一个SpringBoot应用,命名为config-client,在pom.xml中引入如下依赖:/artifactId>org.springframework.cloudspring-cloud-starter-config创建SpringBoot应用程序main类,如下:@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){newSpringApplicationBuilder(Application.class).web(true).run(args);}}创建bootstrap.yml配置指定获取配置文件的config-server-git位置,例如:spring:application:name:config-clientcloud:config:uri:http://localhost:1201/profile:defaultlabel:masterserver:port:2001以上配置参数都在配置文件中存放Git各部分对应关系如下:spring.application.name:cor响应配置文件规则中的{application}部分spring.cloud.config.profile:对应配置文件规则中的{profile}部分spring.cloud.config.label:对应配置文件规则中的{label}部分spring.cloud.config.uri:配置中心config-server的地址。这里要特别注意:bootstrap.properties中必须配置以上属性,这样才能正确加载config-server中的配置信息。完成上面的代码后,读者可以同时启动config-server-git和config-client,然后访问http://localhost:2001/info,我们可以看到端点会返回从git仓库获取的配置信息:{"profile":"default"}另外,我们也可以修改config-client的profile为dev,观察加载配置的变化。代码示例示例项目继续沿用在码云和GitHub上创建的SpringCloud-Learning项目,并重新整理。通过不同目录区分Brixton和Dalston示例。具体项目说明如下:基于Git仓库的配置中心:config-server-git使用配置中心的客户端:config-client,多看这位作者的好文章