spring boot 集成apollo 快速指南

目前市面上流行的三大配置中心框架:Spring CLoud ConfigAlibaba Nacos 以及携程apollo, 咱们相应架构组号召,就使用Apollo吧。java

Work Flow

图1

简单解释:
上图中有三套环境FATUATPROD,每一套环境都部署了2套ConfigserviceAdminservice.使用统一的Portal Server Cluster对全部环境进行配置管理。如咱们本身的配置环境:
图2mysql

Meta-Server(Configservice)说白一点,就是Eureka discovery,每一套环境对应不一样的一套meta server,以此来实现环境隔离,以下图:
图3git

#由于资源有限,所以我配置的三套环境使用同一台数据库,没法实现环境隔离,可是不影响展现效果。
  local.meta=http://localhost:8080
  2 dev.meta=http://localhost:8080
  4 uat.meta=http://localhost:8080
  6 pro.meta=http://localhost:8080

如图2所示。github

Configure Server

apollo 服务端主要有三个Spring Boot项目 和两个数据库组成:spring

  • apollo-configservice(默认端口:8080)

    提供配置的读取、推送等功能,服务对象是Apollo客户端sql

  • apollo-adminservice(默认端口:8090)

    提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)shell

  • apollo-portal(默认端口:8070)

    经过域名访问Meta Server获取Admin Service服务列表(IP+Port),然后直接经过IP+Port访问服务,同时在Portal侧会作load balance、错误重试数据库

  • apolloportaldb
  • apolloconfigdb

由于Apollo官方文档足够详细,想要了解的同窗直接Apollo官网传送门bootstrap

可是又由于官方文档太过详细,以致于若是只想部署的同窗可能以为稍显繁琐,所以,我这里直接开始部署服务端,就废话少说了。springboot

  1. 第一步,下载https://github.com/ctripcorp/apollo/releases
  2. 第二步,下载adminserviceconfigserviceportal三个zip包以后,上传到服务器。
  3. 第三部,在服务器中安装mysql,并建立数据库,脚本传送门
  4. 第四步,分别配置三个Springboot服务并启动,主要配置点有3处:
    1. 数据库配置

      1 # DataSource
        2 spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
        3 spring.datasource.username = wr
        4 spring.datasource.password = wr
    2. 日志路径
      • /根路径/apollo-xxxx.conf
        properties 1 MODE=service 2 PID_FOLDER=. # 这里 3 LOG_FOLDER=/home/jing/software/apollo-portal-1.5.1/logs/100003173/
      • /script/startup.sh

        1 #!/bin/bash
          2 SERVICE_NAME=apollo-portal
        3 ## Adjust log dir if necessary
          #这里
          4 LOG_DIR=/home/jing/software/apollo-portal-1.5.1/logs/100003173
          5 ## Adjust server port if necessary
          6 SERVER_PORT=${SERVER_PORT:=8070}
    3. 配置apollo-portal的meta service信息

      local.meta=http://localhost:8080
        2 dev.meta=http://localhost:8080
        4 uat.meta=http://localhost:8080
        6 pro.meta=http://localhost:8080

      这里也得修改apolloconfigdb数据库中的表serverconfigapollo.portal.envs的配置为:dev,uat,prod

而后apollo server就配置好了,分别启动三个服务便可!访问http://172.16.28.177:8070/

jing@sysdep:~/software/apollo-adminservice-1.5.1$ ps -ef|grep apollo
jing     25348     1 19 08:12 pts/2    00:01:31 /home/jing/.jenv/versions/1.8/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=8080 -Dlogging.file=/home/jing/software/apollo-configservice-1.5.1/logs/100003171/apollo-configservice.log -XX:HeapDumpPath=/home/jing/software/apollo-configservice-1.5.1/logs/100003171/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/home/jing/software/apollo-configservice-1.5.1/logs/100003171/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -jar /home/jing/software/apollo-configservice-1.5.1/apollo-configservice.jar
jing     27274     1 37 08:17 pts/2    00:01:23 /home/jing/.jenv/versions/1.8/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=8090 -Dlogging.file=/home/jing/software/apollo-adminservice-1.5.1/logs/100003172/apollo-adminservice.log -XX:HeapDumpPath=/home/jing/software/apollo-adminservice-1.5.1/logs/100003172/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/home/jing/software/apollo-adminservice-1.5.1/logs/100003172/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -jar /home/jing/software/apollo-adminservice-1.5.1/apollo-adminservice.jar
jing     28964     1 99 08:19 pts/3    00:01:00 /home/jing/.jenv/versions/1.8/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=8070 -Dlogging.file=/home/jing/software/apollo-portal-1.5.1/logs/100003173/apollo-portal.log -XX:HeapDumpPath=/home/jing/software/apollo-portal-1.5.1/logs/100003173/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/home/jing/software/apollo-portal-1.5.1/logs/100003173/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -jar /home/jing/software/apollo-portal-1.5.1/apollo-portal.jar

Configure Client

client workflow

客户端使用分步骤:访问(http://172.16.28.177:8070/)

  1. 第一步:建立项目
    file
    建立以后,以下图
    file

具体查看使用指南传送门

上面不是我要说的重点,重点是如何在咱们项目中使用,以broadway-gateway为例。

  • 第一步:建立bootstrap.yml,在application.yml加载以前要加载配置属性

    app:
    #重点关联,id必须是惟一的,每一个service各自不一样
      id: P000000001 
    apollo:
      meta: http://172.16.28.177:8080/ # apollo-configservice
      bootstrap:
        enabled: true
        namespaces: application
  • 第二步:使用配置的变量

    eureka:
      instance:
        prefer-ip-address: true
      client:
        service-url:
        # 冒号后面的baidu.com是默认值,若是没法链接apollo,可使用默认值防止出错
          defaultZone: ${broad.gateway.eureka.server-list:http://baidu.com}

运行gateway,能够看到以下结果:

2020-01-17 17:06:56.623  INFO 12444 --- [           main] c.c.f.f.i.p.DefaultApplicationProvider   : App ID is set to P000000001 by app.id property from System Property
2020-01-17 17:06:56.634  INFO 12444 --- [           main] c.c.f.f.i.p.DefaultServerProvider        : Environment is set to null. Because it is not available in either (1) JVM system property 'env', (2) OS env variable 'ENV' nor (3) property 'env' from the properties InputStream.
2020-01-17 17:06:56.711  INFO 12444 --- [           main] c.c.f.a.i.DefaultMetaServerProvider      : Located meta services from apollo.meta configuration: http://172.16.28.177:8080/!
2020-01-17 17:06:56.719  INFO 12444 --- [           main] c.c.f.apollo.core.MetaDomainConsts       : Located meta server address http://172.16.28.177:8080/ for env UNKNOWN from com.ctrip.framework.apollo.internals.DefaultMetaServerProvider
2020-01-17 17:06:57.761  INFO 12444 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$bc952272] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v2.1.10.RELEASE)
...

能够看到,在springboot启动以前,apollo首先加载配置信息了~

相关profile信息,后续再表,先改bug了~~

相关文章
相关标签/搜索