2020.3.24笔记——Apollo配置中心

Apollo配置中心

Apollo github官方网址:https://github.com/ctripcorp/apollo
Apollo快速启动官方网址:https://github.com/ctripcorp/apollo/wiki/Quick-Start

Java环境

  • Apollo服务端:1.8+
  • Apollo客户端:1.7+

Mysql版本要求

因为apollo存储的配置需要持久化到本地,所以需要数据库存储配置一些信息。而且Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。

Apollo服务端的安装

  • 下载Quick Start安装包

Apollo Quick Start的官方文档:https://github.com/ctripcorp/apollo/wiki/Quick-Start

官网中提供了两种方式下载:

  1. 从Github下载
  2. 网盘下载
    2020.3.24笔记——Apollo配置中心_第1张图片
  • 创建数据库

pollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。

打开压缩包中的sql文件夹
2020.3.24笔记——Apollo配置中心_第2张图片
将下面的sql文件导入mysql数据库中就可以了
2020.3.24笔记——Apollo配置中心_第3张图片
下面就是mysql中创建的两个数据库
2020.3.24笔记——Apollo配置中心_第4张图片

  • 配置数据库连接

解压Quick Start项目的压缩包,打开文件夹中的demo.sh文件
2020.3.24笔记——Apollo配置中心_第5张图片
下面就是需要配置位置,主要是配置数据库的连接地址和账号密码
2020.3.24笔记——Apollo配置中心_第6张图片

  • 启动Apollo服务端

通过git启动demo.sh启动apollo,需要注意的是Apollo默认会监听8070、8080、8090三个端口,所以启动Apollo这三个端口必须不能被占用。
2020.3.24笔记——Apollo配置中心_第7张图片

  • 访问apollo控制台

apollo控制台的端口默认是8070,本机可以直接访问http://localhost:8070,默认存在管理员账户,账号是apollo,密码是admin。
2020.3.24笔记——Apollo配置中心_第8张图片
2020.3.24笔记——Apollo配置中心_第9张图片

Apollo控制台的使用

Apollo控制台的官网文档
https://github.com/ctripcorp/apollo/wiki/Apollo%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

创建项目,其中AppId是这个项目的唯一标识
2020.3.24笔记——Apollo配置中心_第10张图片
项目默认存在一个集群default,一个namespace application
2020.3.24笔记——Apollo配置中心_第11张图片
创建命名空间(namespace),这里需要创建名称和选择配置文件的类型
2020.3.24笔记——Apollo配置中心_第12张图片
创建配置项
2020.3.24笔记——Apollo配置中心_第13张图片
注意创建的配置项还不能被读取到,必须得发布才能被客户端读取
2020.3.24笔记——Apollo配置中心_第14张图片
下面是在Apollo中创建集群
2020.3.24笔记——Apollo配置中心_第15张图片
新建的集群会同步默认集群的命名空间,但是不会同步命名空间的配置
2020.3.24笔记——Apollo配置中心_第16张图片
当然我们可以手动同步配置,同步的数据还是未发布的,还是需要发布的
2020.3.24笔记——Apollo配置中心_第17张图片
2020.3.24笔记——Apollo配置中心_第18张图片
如果我们需要修改创建项目的一些可选值(通过下拉框选择)时,可以通过修改系统参数实现
2020.3.24笔记——Apollo配置中心_第19张图片
把配置项查询出来并修改
2020.3.24笔记——Apollo配置中心_第20张图片

Apollo总体架构

官方文档:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E8%AE%BE%E8%AE%A1

下面就是官网的描述
2020.3.24笔记——Apollo配置中心_第21张图片
上图简要描述了Apollo的总体设计,我们可以从下往上看:

  • Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端;
  • Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面);
  • Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳;
  • 在Eureka之上我们架了一层Meta Server用于封装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、错误重试;
  • 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中。

从上面图中可以发现Apollo默认内嵌了eureka,用来做服务发现,监听的端口8080
2020.3.24笔记——Apollo配置中心_第22张图片

Apollo客户端的使用

官方文档
https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

普通Java客户端

  • 引入依赖
<dependency>
    <groupId>com.ctrip.framework.apollogroupId>
    <artifactId>apollo-clientartifactId>
    <version>1.1.0version>
dependency>
  • 配置AppId

appid总共有4种配置方式,这个appid就是上面Apollo中创建的项目的唯一标识,下图是官方描述
2020.3.24笔记——Apollo配置中心_第23张图片

  1. System Property
  2. 操作系统的System Environment
  3. Spring Boot application.properties
  4. app.properties

这里使用的是第一种方式,通过配置jvm参数
2020.3.24笔记——Apollo配置中心_第24张图片

  • 配置Apollo Meta Server

再就是配置 Apollo Meta Server,这个就是上面Apollo内嵌的eureka,同样需要告诉客户端它的地址,总共有8种配置方式
2020.3.24笔记——Apollo配置中心_第25张图片

  1. 通过Java System Property apollo.meta
  2. 通过Spring Boot的配置文件
  3. 通过操作系统的System Environment APOLLO_META
  4. 通过server.properties配置文件
  5. 通过app.properties配置文件
  6. 通过Java system property ${env}_meta
  7. 通过操作系统的System Environment ${ENV}_META (1.2.0版本开始支持)
  8. 通过apollo-env.properties文件

这里还是使用第一种方式,通过jvm参数配置
2020.3.24笔记——Apollo配置中心_第26张图片

  • 配置Environment

就是项目的环境,总共有三种配置方式
2020.3.24笔记——Apollo配置中心_第27张图片

  1. 通过Java System Property
  2. 通过操作系统的System Environment
  3. 通过配置文件

这里依然还是通过第一种方式配置,通过jvm参数配置
2020.3.24笔记——Apollo配置中心_第28张图片

  • 从配置中心获取配置
// 获取namespace实例,这里是获取默认的
Config config = ConfigService.getAppConfig();
// 获取namespace为mysql的实例
Config config1 = ConfigService.getConfig("test01");
// 读取配置项,第一个参数是配置项的key,第二个参数是值,可以为null
String value = config.getProperty("name", null);

整合spring boot

依赖还是参见上面普通的Java客户端,配置方式也可以参见上面普通的Java客户端,不过一般spring boot项目都是将配置写在配置文件中。

app:
  id: test # appid
apollo:
  cluster: default #集群配置
  meta: http://localhost:8080 # eureka连接地址
  bootstrap:
    namespace: test01 # namespace
    enabled: true

至于在如何读取配置也是如普通的Java项目一样,只不过需要在springboot的启动类上加上@EnableApolloConfig注解。
2020.3.24笔记——Apollo配置中心_第29张图片
最后如果在spring cloud项目中想要把所有的配置(包括eureka的配置)全部放在配置中心中,并且在启动时成功读取可以参考《监控中心HystrixDashbord和配置中心Spring-Cloud-Config的使用(Finchley版)》中客户端从config上获取配置小节。

客户端实现原理

官方文档:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E8%AE%BE%E8%AE%A1#%E4%B8%89%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AE%BE%E8%AE%A1

2020.3.24笔记——Apollo配置中心_第30张图片
2020.3.24笔记——Apollo配置中心_第31张图片

你可能感兴趣的:(微服务笔记)