Apollo分布式配置中心
一、原理
笔记网址 http://www.pbteach.com/java/java_05_03/20210527/582534840956485632.html
服务启动前需要安装mysql并导入表且需要在配置脚本中更改数据库的连接信息
apollo-portal-1.3.0.jar 控制台服务,用于配置各个服务的配置信息。默认的管理员账户密码:apollo/admin
apollo工作原理:两库三服务(congfigService中包含Meta Server 和Eureka)
各模块职责:
configService服务提供配置的读取、推送等功能,服务对象是Apollo客户端
连接的是ApolloConfigDB数据库,同时该服务包含了Meta Server和Eureka服务,
adminService服务提供配置的新增、修改、发布等功能,服务对象是Apollo Portal(管理界面),连接的是ApolloConfigDB数据库
apolloPortal服务提供管理界面,连接的是ApolloPortalDB数据库。
Eureka提供服务注册和发现,为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中,Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳同时在Eureka之上架了一层Meta Server用于封装Eureka的服务发现接口(相当于Eureka的客户端)。
Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试;
Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试。
核心概念:
1、application (应用):apollo配置的项目唯一标识,Apollo客户端在运行时需要知道项目唯一标识,从而可以去获取该项目对应的配置
关键字:appId
2、environment (环境):配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置
关键字:env
3、cluster (集群):一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群
关键字:cluster
4、namespace (命名空间):一个应用下不同配置的分组,可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等
关键字:namespaces
-Dapp.id=应用名称
-Denv=环境名称
-Dapollo.cluster=集群名称
-D环境_meta=meta地址
Main方法读取配置时启动参数:
-Dapp.id=apollo-quickstart -Denv=DEV -Dapollo.cluster=DEV1
-Ddev_meta=http://localhost:8080
-Dapp.id=apollo-quickstart -Denv=DEV -Dapollo.cluster=DEV1 -Ddev_meta=http://localhost:8080
Springboot整合apollo
引入客户端依赖:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
<version>1.1.0</version>
application.properties配置文件添加配置: