[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

2.安装Mysql

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

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

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

3.导入数据库

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

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

首先登陆数据库

/usr/local/mysql/bin/mysql -u root -p

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

source /Users/sam/123/apollo-build-scripts/sql/apolloconfigdb.sql

导入成功是这个样子

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

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

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

4.启动服务

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

# 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

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


image.png

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

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

用户名:apollo
密码:admin

登陆成功是这个样子


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

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

点击新建项目

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

image.png

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

5.Java客户端配置

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

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.1.0</version>
</dependency>

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

<mirror>
    <id>repo2</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://repo2.maven.org/maven2/</url>
</mirror>

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

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

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

image.png
app:
  id: service-a
apollo:
  meta: http://localhost:8080

地址可以在demo.sh中找到

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

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

    @ApolloConfig
    private Config config;

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

我们访问一下接口

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

接下来我们来修改一下

之后我们点提交

我们再次访问接口

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

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

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

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

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

三.使用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.修改配置文件

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

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.直接修改脚本

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<https://github.com/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/

image.png

四.Demo

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

finally enjoy it.

by objcat 2018.11.27

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容