1. 简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
类似于SpringCloud组件中的Config,不同的是Apollo有 单独的管理界面,并且不用整合gitee/gitlab,配置简单。
用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。
支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。
Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。
配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少,目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来,Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数。
Apollo整体架构原理:
2. 搭建环境
软硬件要求:服务器内存2g及以上,MySQL 2g及以上,jdk1.8+
① 首先需要去github下载两个项目:https://github.com/nobodyiam/apollo-build-scripts,见下图:
需要导入的两个sql文件,到自己的数据库(版本5.7以上)
各自代表和含义为:apolloconfigdb(存放配置文件信息)、apolloportaldb(门户网站,即apollo服务端可视化界面)
② 上传 apollo-build-scripts-master.zip 文件到服务器(192.168.0.108)的/usr/local目录,并解压
如果没有unzip命令,请安装:yum -y install zip unzip
[root@localhost local]# unzip apollo-build-scripts-master.zip
③ 进入解压后的 apollo-build-scripts-master 目录,修改demo.sh,主要修改以下三个地方:
④ 启动apollo:
[root@localhost apollo-build-scripts-master]# ./demo.sh start
当出现上图中的情形,即代表启动成功!下面可以访问eureka和apollo
默认账号为apollo,密码为admin,登录成功后为如下页面:
⑤ 创建项目,点击上图的创建项目按钮
提交后,点击右上角的新增配置:
点击发布:
3. SpringBoot/SpringCloud 整合Apollo分布式配置中心
首先,需要手动把上篇博客下载好的apollo-master项目打包到本地maven仓库,直接用IDEA的package即可,这里我介绍一个更快速的方式:进入apollo-maste/scripts,直接双击bulid.bat即可把整个apollo-master打到本地maven仓库
下面开始springboot整合apollo分布式配置中心:
①. 首先需要引入以下pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- springcloud-eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- apollo 携程apollo配置中心框架 -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.0.0</version>
</dependency>
②. 配置application.yml
server:
port: 8001
spring:
application:
name: springboot-apollo
eureka:
client:
service-url:
defaultZone: http://192.168.0.108:8080/eureka
③. 新建apollo-env.properties,app.properties
其中apollo-env.properties配置apollo的连接地址等信息,app.properties配置apollo服务端的AppId
// apollo-env.properties
local.meta=http://192.168.0.108:8080
dev.meta=http://192.168.0.108:8080
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
// app.properties
app.id=app_client
结构图
④. 修改/opt/settings/server.properties(Mac/Linux)或C:\opt\settings\server.properties(Windows)文件,设置env为DEV
env=DEV
⑤. 启动类添加注解@EnableApolloConfig
package com.example.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApolloController {
@Value("${myname:default}")
private String name;
@RequestMapping("/getName")
public String getName() {
return name;
}
}
启动,访问地址:http://localhost:8001/getName
此时,修改Apollo的key值为xyy,然后点击发布(切记),再次访问:
可以看到配置文件刷新过来了,至此,Apollo环境搭建并整合springboot轻松搞定!~
如果想研究底层实现原理,可以参考该网址:https://github.com/ctripcorp/apollo/wiki/Apollo配置中心设计