SpringCloud - Apollo分布式配置中心

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配置中心设计

发布了45 篇原创文章 · 获赞 20 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/AkiraNicky/article/details/94333507