Springboot+SpringCloud实战(微课版)14-第十四章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
配置Config Server
③ 创建一个controller包,并在controller包下创建一个读取配置的ConfigController类,通过@Value注解读 取Yml文件配置的方式,设计访问Config Server读取本地文件的接口,如程序清单14-6所示。
配置Config Server
结合Spring Cloud Bus实现配置动态刷新
在上一节中我们学习了在Spring Cloud微服务系统架构中使用Config Server进行本地仓库配 置读取和线上环境的远程仓库git配置读取,让我们在多个微服务下也可以进行配置信息的集中 管理。但是还有一个问题,那就是Config Server从git读取配置文件是项目启动的时候进行的 ,如果项目启动后我们修改了配置信息,那么服务还是使用原来的配置信息,想要修改的配置 即时生效我们还需要重启服务项目进行手动刷新。为了解决这个问题,Spring Cloud提供了一 些解决方式,例如,提供@RefreshScope注解可以实现配置修改之后自动刷新、提供Spring Cloud Bus消息总线配合Config Server进行多端配置的自动刷新。下面我们就来看看如何在 Spring Cloud系统中实现配置的自动刷新。
配置Config Server
Config Server 从git仓库读取配置文件 Config Server如果从git仓库读取配置文件,则需要我们提前创建一个git仓库,具体的开发步 骤如下。 ① 在远程git上创建一个仓库,这里我们使用Gitee来创建一个名为“config”的公开仓库。并 将config-client-dev.yml文件上传到git仓库,如图所示。
Config Server 从本地仓库读取配置文件 本地仓库存储配置主要用于我们日常应用中的开发和调试,当我们的应用发布后就可以使用远程git 仓库存储配置,我们可以设置一个多环境配置,在本地与线上配置间来回切换。 从本地仓库获取配置信息需要分两个部分完成,一个部分是配置本地读取方式的Config Server端 ,另外一个部分就是配置读取本地配置的Config Client端。
从程序清单中的注释可以看出Config Server默认从应用的src/main/resources目录下搜索配置文 件,所以我们在项目的resources文件夹下创建config文件夹,并在里面创建一个config-clientdev.yml文件,在里面配置一些自定义信息,如图所示。
配置Config Server
Spring Cloud Config介绍
Config Server和Config Client实现配置读取的流程如图所示。
从图中我们可以看出,Config Client的配置都是从Config Server中获取的,而Config Server根据 我们自己配置的方式从本地配置文件或者Git仓库获取配置。所以接下来我们想要实现分布式配置 就需要进行和Config Server和Config Client的搭建和配置。
配置Config Server
② 在config-client项目下的resources目录里面创建一个bootstrap.yml配置文件。注意,此时的配置文件不是 application.yml,bootstrap.yml的不同之处在于它加载的优先级高于应用程序运行时执行的application.yml文 件。如果我们配置的是application.yml,那么程序直接就把application.yml的配置加载了,即使后续从Config Server中读取到了配置也不会生效,所以我们这里使用bootstrap.yml才能够正确读取并加载配置信息。在 bootstrap.yml中就可以配置一些Config Server读取的配置,如程序清单14-5所示。
然后在浏览器中访问“http://localhost:7031/config/getVersion”查看是否读取成功,结果如图所示。
注意
如果Spring Boot和Spring Cloud的版本不匹配会导致bootstrap.yml文件无法 被读取。本章中Spring Boot的版本为“2.2.11”,Spring Cloud的版本为 “Hoxton.SR9”。
第十四章 Spring Cloud配置中心
学习目标
了解Spring Cloud Config的作用。 熟悉Config Server从本地仓库读取配置文件。 熟悉Config Server从远程仓库git读取配置文件。 熟悉Spring Cloud Config使用RabbitMQ消息队列并结合Spring Cloud Bus实
现配置的自动刷新。 熟悉如何搭建Config Server高可用集群
之前我们通过搭建各种微服务学习了Spring Cloud的Eureka、网关Zuul、客户端负载均衡器Ribbon 以及服务熔断器Hystrix的使用,但是之前的微服务的配置都是服务单独配置的全局文件。而在一个基 于微服务的分布式系统中,可能业务非常多,划分的服务以及服务集群也可能很多,每个服务都有自 己相应的配置,除了项目运行的一些基础配置外还可能有一些跟业务有关的配置,如SSO存储、短信 相关、邮件相关等。如果这么多的服务配置都单独管理的话将非常烦琐,所以对微服务中的配置文件 做到统一集中管理、让服务配置修改后无需重启应用就可以生效变得非常迫切。想要解决这样的问题 就需要使用分布式配置中心。Spring Cloud提供的分布式配置中心就是本章要讲解的Spring Cloud Config。
2.本地存储Config Client搭建 其实Config Client是配置在各个业务服务项目中的,这里为了方便读书快速学会Config的使用,我们新 建一个名为“config-client”的Spring Boot项目,通过Config Server来获取本地存储配置信息。 ① 新建一个名为“config-client”的Spring Boot项目。并在项目的pom.xml文件中添加Eureka Client、 Web和Config Client的依赖,如程序清单14-4所示。
配置Config Server
② 为项目创建YML配置文件,分别为本地存储环境application.yml、git存储环境applicationpro.yml。然后我们在application.yml文件中配置端口号、项目名称、Config Server信息,如程 序清单14-2所示。
配置Config Server
配置Config Server
③ 在项目config-client中配置访问git仓库,如配置中心地址、git分支名、配置文件环境{profile}等,如程序 清单14-8所示。
配置Config Server
因为Config Server访问git仓库时可能会因为网络等原因导致访问失败,所以我们可以进行失败重试配置, 需要添加相关的依赖,如程序清单14-9所示。
1 Spring Cloud Config介绍 2 配置Config Server 3 结合Spring Cloud Bus实现配置动态刷新 4 搭建Config Server高可用集群
配置Config ServerLeabharlann Baidu
通过之前的介绍我们知道Config Server读取配置文件有2种方式:一种是从本地仓库中读取并缓存 到Config Server项目中;另外一种是从远程仓库读取(这里我们以git为例)并缓存到Config Server项目中供Config Client获取。所以下面我们会这两种不同的方式搭建Config Server(其实 只是application.yml配置不同而已)。
Spring Cloud Config介绍
2.Config Client Config Client是Config Server的客户端,可以通过Config Server提供的API获取到存储的配置属 性,并依据此初始化自己的应用。它主要有以下功能。
• 绑定到Config Server并使用远程属性源初始化Spring容器。 • 对配置文件中的属性进行加密和解密。
1.Config Server Config Server是一个集中式的配置服务器,它提供配置文件的存储配置,支持本地仓库读取配置 ,也支持远程git或SVN读取配置,默认为git存储配置,然后以接口的形式将配置文件的内容提供 出去。它主要有以下功能。
• 提供用于外部配置的基于HTTP资源的API。 • 对配置文件中的属性进行加密和解密。 • 可轻松地使用@EnableConfigServer注解将其应用到Spring Boot程序中 。
配置Config Server
1.本地存储Config Server搭建 ① 通过IDEA工具创建一个名为“config-server”的Spring Boot工程,考虑到我们需要对配 置中心进行服务管理以及后面需要实现配置中心的高可用集群,所以我们需要把它配置成一个 Eureka Client,配置的方式跟我们之前配置时类似。在项目的pom.xml文件中添加springcloud-config-server依赖,如程序清单14-1所示。
④ 重启服务config-server和服务config-client,然后在浏览器中访问接口“config/getVersion”,如果返回 有结果那么证明从git仓库获取配置信息成功,如图所示。
1 Spring Cloud Config介绍 2 配置Config Server 3 结合Spring Cloud Bus实现配置动态刷新 4 搭建Config Server高可用集群
Spring Cloud Config在官方文档中的表述:为分布式系统中的外部化配置提供服务器Config Server和客户端Config Client支持。使用Config Server,您可以在所有环境中管理应用程序的外 部属性。它与Spring应用程序非常契合,也可以与任何以任何语言运行的应用程序一起使用。对 于应用程序从开发到测试和生产的部署流程,Config Server都可以管理这些环境之间的配置,并 确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松支持 配置信息的版本管理,以及可以访问用于管理内容的各种工具。可以轻松添加替代实现,并使用 Spring配置将其插入。
git仓库的存储方式跟本地存储基本上都一样,只需在YML文件中把从本地存储获取改为从git 仓库获取。
配置Config Server
② 在项目config-server中修改Config Server获取方式为git,主要是配置git仓库地址、git分支名、连接git的 账号/密码或者SSH(Secure Shell,安全外壳)连接方式的private-key(私钥),如程序清单14-7所示。
1 Spring Cloud Config介绍 2 配置Config Server 3 结合Spring Cloud Bus实现配置动态刷新 4 搭建Config Server高可用集群
Spring Cloud Config介绍
市场上的开源的配置中心有很多,如奇虎360的QConf、淘宝的Diamond、百度的Disconf、携程 的Apollo都可解决上述提到的问题,同样地Spring Cloud提供的配置中心则是Spring Cloud Config。
Spring Cloud Config介绍
Spring Cloud Config默认支持的是从git存储读取配置信息,也支持从其他的存储方式读取配置信 息,如本地文件系统、SVN仓库等。想要学会使用Spring Cloud Config,我们需要先了解Spring Cloud Config实现配置的两个重要角色:Config Server和Config Client。