一、什么是配置中心?
配置中心就是一种统一管理各种应用配置的基础服务组件。配置中心将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。
1.什么是配置?
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期。 比如:数据库连接参数、系统启动参数等。
2.配置的特点:
①配置是独立于程序的只读变量
②配置伴随应用的整个生命周期
③配置可以有多种加载方式(配置文件、环境变量、启动参数、数据库等)
3.配置需要管理:
①权限管理:对配置的修改权限等。
②不同环境、集群配置管理:同一程序在不同环境(开发、测试、生产)或不同集群(如不同数据中心)里有时需要不同的配置。
二、什么是Apollo?
携程开源的配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具有规范的权限、流程治理等特征,适用于微服务配置管理场景。
1、Apollo包含服务端和客户端两部分:
(1)服务端:
基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
(2)Java客户端:
不依赖任何框架,能运行于所有Java运行时环境,对Spring/Spring Boot环境有较好的支持。
2、Apollo的执行流程
3、Apollo配置中心的工作原理。
Apollo配置中心开始工作前,首先需要进行一些配置连接,创建好 ApolloPortalDB和ApolloConfigDB数据库后,进行数据库连接,ConfigService与AdminService连接ConfigDB,Portal连接PortalDB,连接好数据库之后,便需要在portal里配置环境信息meta Service。
通过localhost:xxxx【这里为自己设置的portal端口号】打开界面,进入到Apollo的配置中心,登录——创建应用——增加配置——发布配置,此时Portal会请求adminService去数据库中修改信息,接着adminServic再去通知ConfigService得到配置的信息。
然后,如何实现客户端获取配置信息呢?举例使用到idea,在编辑配置中设置VM options信息,通过导入apollp-client与slf4j-simple依赖,通过ConfigService类去调用getApolloConfig方法获取portal界面中创建的配置,再通过获取的该配置去调用getProperty方法,传参去找到配置返回应用配置中的value信息,最后实现apollo客户端获取配置信息。
三、Apollo的核心概念?
1、application(应用)关键字:
相当于一个项目。Apollo 客户端在运行时需要知道应用的标识,从而可以根据这个标识去配置中心获取对应的配置。应用的标识用 APPid 来指定。
appId 实际使用配置的应用,Apollo客户端在运行时需要知道当前应用是谁,从而可以去获取对应的配置。
2、environment(环境)关键字:
就是常见的开发、测试等环境,不同的环境对应的配置内容不一样。Apollo 客户端在运行时除了需要知道项目当前的身份标识,还需要知道当前项目对应的环境,从而可以根据环境去配置中心获取对应的配置
env 配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而去获取相应的配置。如开发环境、测试环境等。
3、cluster(集群)关键字:
一个应用下不同实例的分组。用上课的例子来说,就像上海可以作为一个应用的集群,北京也可以作为一个。同时还有在多机房的环境下,针对不同的机房,我们可以划分出不同的集群,集群可以拥有不同的配置。
cluster 一个应用下不同实例的分组,比如典型的可按照数据中心分,上海机房的应用实例分为一个集群,北京机房的应用实例分为另一个集群。
4、namespace(命名空间)关键字:
相当于一个应用下不同配置的分组。是用来对配置做分类,不同类型的配置存放在不同的命名空间中。
namespaces 一个应用下不同配置的分组,不同类型的配置存放在不同的组中,如数据库配置组,RPC配置组,应用自身配置组等。【key,value不同】
四、客户端读取配置
1、pom.xml配置依赖项:
要在IDEA中使用Apollo客户端获取配置,需要在pom.xml中配置以下两个依赖项。
2、编写代码进行测试:
本次测试中用到两个方法:
①ConfigService.getAppConfig():连接到ConfigService的DEV环境。
②appConfig.getProperty():获取配置信息。
3、修改VM options
打;开Run/Debug Configuration,并显示VM options框。
在VM options中要输入三组参数,每组参数均以-D开头
①-Dapp.id=**** 配置Apollo Portal中某个应用的id。
②-Denv=DEV 指明要配置DEV环境。
③-Ddev_meta=http://localhost:8088 指明dev环境的meta地址(不同环境下的meta地址是不一样的),ip和端口号都要根据自己情况进行修改。
4、热发布
修改测试代码,使其能一直进行配置的获取和打印。