spring boot 集成apollo 快速指南


目前市面上流行的三大配置中心框架:Spring CLoud ConfigAlibaba Nacos 以及攜程apollo, 我們相應架構組號召,就使用Apollo吧。

Work Flow

圖1

簡單解釋:
上圖中有三套環境FATUATPROD,每一套環境都部署了2套ConfigserviceAdminservice.使用統一的Portal Server Cluster對所有環境進行配置管理。如我們自己的配置環境:
圖2

Meta-Server(Configservice)說白一點,就是Eureka discovery,每一套環境對應不同的一套meta server,以此來實現環境隔離,如下圖:
圖3

  #因為資源有限,因此我配置的三套環境使用同一台數據庫,無法實現環境隔離,但是不影響展示效果。
  local.meta=http://localhost:8080
  2 dev.meta=http://localhost:8080
  4 uat.meta=http://localhost:8080
  6 pro.meta=http://localhost:8080

如圖2所示。

Configure Server

apollo 服務端主要有三個Spring Boot項目 和兩個數據庫組成:

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

    提供配置的讀取、推送等功能,服務對象是Apollo客戶端

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

    提供配置的修改、發布等功能,服務對象是Apollo Portal(管理界面)

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

    通過域名訪問Meta Server獲取Admin Service服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在Portal側會做load balance、錯誤重試

  • apolloportaldb
  • apolloconfigdb

因為Apollo官方文檔足夠詳細,想要了解的同學直接Apollo官網傳送門

但是又因為官方文檔太過詳細,以至於如果只想部署的同學可能覺得稍顯繁瑣,因此,我這里直接開始部署服務端,就廢話少說了。

  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
          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了~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM