[JavaEE] SpringCloud集成Apollo分布式配置中心

前文链接

[JavaEE] 搭建SpringCloud环境 进入微服务时代
https://www.jianshu.com/p/a0365a635975
温馨提示:本文是基于前文的扩展 没有基础的新手可以先去学习上文

相关链接

项目地址:
https://github.com/ctripcorp/apollo
快速构建脚本:
https://github.com/nobodyiam/apollo-build-scripts
Java客户端使用指南:
https://github.com/ctripcorp/apollo/wiki/Java

一.简介

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

上面说的你可能并不理解, 这里说一下, 所谓分布式配置中心就是把应用内的配置文件通过技术手段放在云端, 在云端配置过后可以在不发包的情况下立刻让配置生效从而节省了大量打包, 发包, 重启服务的时间.

看了看官方给的文档, 确实很不错, 但是面向的用户都是行内人员, 新手用起来是非常不方便的, 甚至你看完整篇官方文档, 也不能实现你想要的效果 所以这里写一篇简洁的文章来记录一下, 这里提供两种安装方式, 常规安装Docker安装.

二.常规安装

1.下载安装脚本

官方给我们提供出一套构建脚本 首先下载到本地
https://github.com/nobodyiam/apollo-build-scripts

[JavaEE] SpringCloud集成Apollo分布式配置中心_第1张图片

2.安装Mysql

因为Apollo的数据存储是基于mysql的所以需要在本地安装一下 windows用户自行安装, mac下可以参考我的另一个文章

[MySQL] Mac下安装MySQL并初始化数据库密码
https://www.jianshu.com/p/4d232bcb0114

这里有可能需要使用一个软件 就是 Navicat Premium, 是一款图形化操作数据库的软件 我的教程中也有写到过 数据库安装到此为止

3.导入数据库

[JavaEE] SpringCloud集成Apollo分布式配置中心_第2张图片

我们可以看到 目录中有两个.sql文件, 这两个东西就是阿波罗启动时需要用到的表 我们先把他们导入数据库

这里只演示mac上的导入过程

首先登陆数据库

/usr/local/mysql/bin/mysql -u root -p
[JavaEE] SpringCloud集成Apollo分布式配置中心_第3张图片

然后输入密码就成功登陆到数据库了 之后我们用source命令来导入sql文件, 路径请替换成你自己的文件路径

source /Users/sam/123/apollo-build-scripts/sql/apolloconfigdb.sql
[JavaEE] SpringCloud集成Apollo分布式配置中心_第4张图片

导入成功是这个样子

之后我们来导入另一个数据库 一共有两个
apolloconfigdb.sql, apolloportaldb.sql

然后我们打开Navicat Premium查看一下

[JavaEE] SpringCloud集成Apollo分布式配置中心_第5张图片

我们可以看到这两个数据库都导入完成了 OK 进行下一个阶段

4.启动服务

在启动之前我们需要配置一下demo.sh文件 主要配置一下数据库

[JavaEE] SpringCloud集成Apollo分布式配置中心_第6张图片
# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=000000

# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=000000

配置成功之后, 我们就可以尝试启动阿波罗了, 在终端输入命令

首先cd到目录

cd /Users/sam/123/apollo-build-scripts 

然后执行shell

sh demo.sh start

执行成功会出现下方提示 需要耐心等待 服务会依次启动


[JavaEE] SpringCloud集成Apollo分布式配置中心_第7张图片
image.png

出现下方的提示就说明启动已经成功了

[JavaEE] SpringCloud集成Apollo分布式配置中心_第8张图片

之后我们来访问一下阿波罗试试吧
http://localhost:8070

[JavaEE] SpringCloud集成Apollo分布式配置中心_第9张图片

用户名:apollo
密码:admin

登陆成功是这个样子


[JavaEE] SpringCloud集成Apollo分布式配置中心_第10张图片

到这里阿波罗就搭建完成了!

下面我们就来做一个service-a的配置中心

点击新建项目

[JavaEE] SpringCloud集成Apollo分布式配置中心_第11张图片

填写如上配置, 注意应用id这个属性很重要, 我们之后在客户端中也需要用到这个配置, 所以请妥善配置

[JavaEE] SpringCloud集成Apollo分布式配置中心_第12张图片
[JavaEE] SpringCloud集成Apollo分布式配置中心_第13张图片
[JavaEE] SpringCloud集成Apollo分布式配置中心_第14张图片
image.png

发布之后 我们的配置中心就配置完成了! 接下来我们配置客户端来使用这个配置中心.

5.Java客户端配置

到了这一步 其实就非常简单了 首先我们使用maven导入包


    com.ctrip.framework.apollo
    apollo-client
    1.1.0

这里有可能提示一个错误信息, maven无法导入包 解决方案是修改一下setting.xml的镜像源配置


    repo2
    central
    Human Readable Name for this Mirror.
    http://repo2.maven.org/maven2/

如果没有遇到可以不用修改

之后我们在入口文件中加入@EnableApolloConfig来开启配置中心服务

[JavaEE] SpringCloud集成Apollo分布式配置中心_第15张图片

我们在application.yml中配置一下 我们之前创建的应用id和地址就可以了

[JavaEE] SpringCloud集成Apollo分布式配置中心_第16张图片
image.png
app:
  id: service-a
apollo:
  meta: http://localhost:8080

地址可以在demo.sh中找到

[JavaEE] SpringCloud集成Apollo分布式配置中心_第17张图片

配置好之后 我们的service-a会自动关联阿波罗

我们来写一个接口测试一下吧

[JavaEE] SpringCloud集成Apollo分布式配置中心_第18张图片
    @ApolloConfig
    private Config config;

    @GetMapping("/hello")
    public String hello() {
        System.out.println("线程池名称: " + Thread.currentThread().getName());
        return config.getProperty("name", "default");
    }

我们访问一下接口

[JavaEE] SpringCloud集成Apollo分布式配置中心_第19张图片

我们发现确实我们刚才在配置中心配置的值

接下来我们来修改一下

[JavaEE] SpringCloud集成Apollo分布式配置中心_第20张图片
[JavaEE] SpringCloud集成Apollo分布式配置中心_第21张图片

之后我们点提交

[JavaEE] SpringCloud集成Apollo分布式配置中心_第22张图片

我们再次访问接口

[JavaEE] SpringCloud集成Apollo分布式配置中心_第23张图片

我们发现接口中的文字并没有改变

仔细想想到底是哪出了问题呢? ??

对了 是修改的值还没有发布出来 - -

[JavaEE] SpringCloud集成Apollo分布式配置中心_第24张图片

我们点击发布后再次访问一下接口

[JavaEE] SpringCloud集成Apollo分布式配置中心_第25张图片

这次我们发现接口中的值已经改变了 这就是分布式配置中心最基础的用法了.

三.使用Docker安装

官方建议使用Docker安装需要先学习基础, 这里推荐一篇自己的文章

[Docker] 入门教程
https://www.jianshu.com/p/7b3737df847d
[Docker] docker-compose使用教程
https://www.jianshu.com/p/4fbe3de8f416

再看下面的文章时, 我已默认你有了一些Docker基础, 我们继续:

1.下载安装脚本

https://github.com/nobodyiam/apollo-build-scripts

2.修改配置文件

压缩包解压, 在文件夹中可以找到下图中的脚本

[JavaEE] SpringCloud集成Apollo分布式配置中心_第26张图片
image.png

我们来看一下它的内容

version: '2'

services:
  apollo-quick-start:
    image: apollo-quick-start
    container_name: apollo-quick-start
    depends_on:
      - apollo-db
    ports:
      - "8080:8080"
      - "8070:8070"
    links:
      - apollo-db

  apollo-db:
    image: mysql:5.7
    container_name: apollo-db
    environment:
      TZ: Asia/Shanghai
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    depends_on:
      - apollo-dbdata
    ports:
      - "13306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
    volumes_from:
      - apollo-dbdata

  apollo-dbdata:
    image: alpine:latest
    container_name: apollo-dbdata
    volumes:
      - /var/lib/mysql

之后我们来执行这个脚本

zhangyideMacBook-Pro:~ objcat$ cd /Users/objcat/Downloads/apollo-build-scripts-master
zhangyideMacBook-Pro:apollo-build-scripts-master objcat$ docker-compose up
Pulling apollo-quick-start (apollo-quick-start:)...
ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.

Continue with the new image? [yN]y
Pulling apollo-quick-start (apollo-quick-start:)...
ERROR: pull access denied for apollo-quick-start, repository does not exist or may require 'docker login'

我们会发现上面报错说apollo-quick-start这个镜像没找到, 所以这个脚本是有错误的,apollo-quick-start并不是一个官方镜像, 所以你是无法直接拉取使用的, 我们现在来构造这个镜像.

这里有两种方法:

1.直接修改脚本

[JavaEE] SpringCloud集成Apollo分布式配置中心_第27张图片
image.png

修改后我们再次执行命令即可, 阿波罗会自动启动

docker-compose up -d

2.先编译镜像, 再执行启动脚本

先执行命令编译镜像docker build -t apollo-quick-start .

zhangyideMacBook-Pro:apollo-build-scripts-master objcat$ docker build -t apollo-quick-start .
Sending build context to Docker daemon  66.06MB
Step 1/10 : FROM openjdk:8-jre-alpine
 ---> d4557f2c5b71
Step 2/10 : MAINTAINER nobodyiam
 ---> Running in 94427a91dd60
Removing intermediate container 94427a91dd60
 ---> ded2912b15c0
Step 3/10 : COPY apollo-all-in-one.jar /apollo-quick-start/apollo-all-in-one.jar
 ---> 29112cd46c81
Step 4/10 : COPY client /apollo-quick-start/client
 ---> fd925059f358
Step 5/10 : COPY demo.sh /apollo-quick-start/demo.sh
 ---> 9b86e18f353d

编译完成后直接执行脚本即可

zhangyideMacBook-Pro:apollo-build-scripts-master objcat$ docker-compose up -d
Creating apollo-dbdata ... done
Creating apollo-db     ... done
Creating apollo-quick-start ... done
zhangyideMacBook-Pro:apollo-build-scripts-master objcat$ 

-d的意思是在后台执行, 不把log显示在终端上

启动之后, 我们来尝试访问一下

http://localhost:8070/

[JavaEE] SpringCloud集成Apollo分布式配置中心_第28张图片
[JavaEE] SpringCloud集成Apollo分布式配置中心_第29张图片
image.png

四.Demo

https://github.com/objcat/test-spring-cloud-demo.git

finally enjoy it.

by objcat 2018.11.27

你可能感兴趣的:([JavaEE] SpringCloud集成Apollo分布式配置中心)