Apollo

配置中心:统一管理各种应用配置的基础服务组件。

Apollo工作原理

工作示意图
  • 统一管理不同环境、不同集群的配置
  • 配置修改实时生效(热发布)
  • 版本发布管理
  • 灰度发布(Nacos不支持)
  • 权限管理、发布审核
底层原理
  • 【Config Service】提供配置的读取、推送等功能,服务对象是Apollo 客户端
  • 【Admin Service】提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
  • Eureka提供服务注册和发现,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进程

核心概念

  • 获取层级:应用app > 环境env > 集群 cluster > 命名空间namespace(可继承公共命名空间,一个namespace相当于一个配置文件)
  • 配置层级:环境env > 其他... 【env】只能从 {OS_ENV, JVM_FIELD} 中获取,其他的可以在配置文件配置。

使用

  1. 创建数据库表。在数据库运行指定SQL文件即可。
  2. 启动服务

github下载(找加速下载)三个文件:adminservice、configservice、portal,取出xxx-2.0.1.jar放入同一目录。随后创建bat文件并启动:

echo

set url="118.190.134.156:3306"
set username="root"
set password="dingyuanseu123456"
set charEnco="characterEncoding=utf8&serverTimezone=UTC"
set configHost="http://localhost"
set configPort="8080"

start "configService" java -Xms256m -Xmx256m -Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://%url%/ApolloConfigDB?%charEnco% -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -jar apollo-configservice-2.0.1.jar -Dserver.port=%configPort%

start "adminService" java -Xms256m -Xmx256m -Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://%url%/ApolloConfigDB?%charEnco% -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -jar apollo-adminservice-2.0.1.jar -Dserver.port=8090

java -Xms256m -Xmx256m -Dapollo_profile=github,auth -Ddev_meta=%configHost%:%configPort%/ -Dspring.datasource.url=jdbc:mysql://%url%/apolloPortalDB?%charEnco% -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -Dapollo_profile=github,auth -Ddev_meta=%configHost%:%configPort%/ -Dsever.port=8070 -jar apollo-portal-2.0.1.jar

访问控制台【localhost:8070/】即可,默认账密【apollo/admin】,打开的网页,即是【Apollo 配置中心】的web页面。

  1. 根据要求【创建应用】【新增配置】【发布】
  2. Maven 项目中获取配置信息

首先配置依赖,有了该依赖即可调用 Apollo Service。


  com.ctrip.framework.apollo
  apollo-client
  2.0.1

SpringBoot 集成 Apollo

  • 启动类 XxxApplication】:添加注解【@EnableApolloConfig】开启Apollo,并添加【env】系统变量。env本身可以配置在 { 环境变量,VMoptions,JVM属性 },配置方式分别为:

  • 环境变量:在系统环境变量,或者用户环境变量中配置,获取方式:System.getenv("env")

  • VMoptions:在IDEA的configurations中配置:-Denv=DEV

  • JVM属性:在启动类中前面添加:System.*setProperty*("env", "DEV");

  • application.yml】:配置【app.id】【cluster】【namespace】【meta】【cache-url】以及其他一些属性,方式如下:


app:
  id: spring-cloud-config

apollo:
  bootstrap:
  enabled: true **#****开启****apollo**
namespaces: application, TEST2.apollo-settings1, log4j-config **#application****是默认命名空间**
  eagerLoad:
  enabled: false
 cluster: DEFAULT
  meta: [http://localhost:8080](http://localhost:8080)
  cache-dir: d:/cache/apolloCache
  • Question:为什么不在application.yml中配置【env】属性呢?

主观上,往往开发在一台机器,测试、上线在其他机器,【env】值由机器决定,因此【env】作为系统环境变量更合适;

客观上,apollo-client 未显式提供【env】配置,只支持从【os环境变量】和【JVM属性】中获取;配置文件配置了也获取不到。

你可能感兴趣的:(Apollo)