Apollo原始碼除錯看一文就夠
Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同叢集的配置,配置修改後能夠實時推送到應用端,並且具備規範的許可權、流程治理等特性,適用於微服務配置管理場景。
我們先 拉取原始碼 ,修改maven setting file,構建本地工程同時,我們再來筆者這篇文章。
這篇我們只 關注於預設dev環境的啟動配置 (比較簡單的配置),其實ApolloPortalDB只需要在生產環境部署一個即可,而ApolloConfigDB需要在每個環境部署一套,如dev、fat、uat和pro分別部署4套ApolloConfigDB。
一、建立資料庫
Apollo服務端共需要兩個資料庫: ApolloPortalDB
和 ApolloConfigDB
,我們把資料庫、表的建立和樣例資料都分別準備了sql檔案,只需要匯入資料庫即可。
建立ApolloPortalDB
通過MySQL客戶端匯入 apolloportaldb.sql 即可。
建立ApolloConfigDB
通過MySQL客戶端匯入 apolloconfigdb.sql 即可。
二、本地啟動
2.1 啟動Apollo Config Service和Apollo Admin Service
建立執行配置
Main class 配置
com.ctrip.framework.apollo.assembly.ApolloApplication
Vm options 配置
-Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 -Dspring.datasource.username=root -Dspring.datasource.password=****** -Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-assembly.log
1、datasource相關配置替換成你自己的資料庫連線資訊,注意資料庫是ApolloConfigDB
2、程式預設日誌輸出為/opt/logs/100003171/apollo-assembly.log,如果需要修改日誌檔案路徑,可以增加logging.file引數,如下:
-Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-assembly.log
Program arguments 配置
--configservice --adminservice
Use classpath of module 配置
apollo-assembly
啟動執行
啟動完後,開啟 http://localhost:8080 可以看到 apollo-configservice
和 apollo-adminservice
都已經啟動完成並註冊到Eureka。
2.2 啟動Apollo-Portal
建立執行配置
Main class 配置
com.ctrip.framework.apollo.portal.PortalApplication
Vm options 配置
-Dapollo_profile=github,auth -Ddev_meta=http://localhost:8080/ -Dserver.port=8070 -Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8 -Dspring.datasource.username=root -Dspring.datasource.password=root@123 -Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-portal.log
1、預設ApolloPortalDB中匯入的配置只會展示DEV環境的配置,所以這裡配置了dev_meta屬性,如果你希望在本地展示其它環境的配置,需要在這裡增加其它環境的meta伺服器地址,如fat_meta。
2、程式預設日誌輸出為/opt/logs/100003171/apollo-assembly.log,如果需要修改日誌檔案路徑,可以增加logging.file引數,如下:
-Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-portal.log
Program arguments 配置
--configservice --adminservice
Use classpath of module 配置
apollo-protal
啟動完後,開啟 http://localhost:8070 就可以看到Apollo配置中心介面了。
預設賬號密碼apollo/admin
2.3 接入客戶端
建立執行配置
Main class 配置
com.ctrip.framework.apollo.demo.spring.springBootDemo.SpringBootSampleApplication
Vm options 配置
-Denv=dev -Ddev_meta=http://localhost:8080
我們先配置dev環境的meta server地址為 http://localhost:8080
,也就是 apollo-configservice
的地址。
Use classpath of module 配置
apollo-demo
2.4 服務端配置項
ApolloPortalDB配置
1.apollo.portal.envs - 可支援的環境列表
預設值是dev,如果portal需要管理多個環境的話,以逗號分隔即可(大小寫不敏感),如:
DEV,FAT,UAT,PRO
修改完需要重啟生效。
2.organizations - 部門列表
Portal中新建的App都需要選擇部門,所以需要在這裡配置可選的部門資訊,樣例如下:
[{"orgId":"TEST1","orgName":"樣例部門1"},{"orgId":"TEST2","orgName":"樣例部門2"}]
ApolloConfigDB配置
配置項統一儲存在ApolloConfigDB.ServerConfig表中,需要注意每個環境的ApolloConfigDB.ServerConfig都需要單獨配置,修改完一分鐘實時生效。
1. eureka.service.url - Eureka服務Url
預設本地就是http://localhost:8080/eureka/
2. namespace.lock.switch - 一次釋出只能有一個人修改開關,用於釋出稽核
這是一個功能開關,如果配置為true的話,那麼一次配置釋出只能是一個人修改,另一個釋出。
3. config-service.cache.enabled - 是否開啟配置快取
這是一個功能開關,如果配置為true的話,config service會快取載入過的配置資訊,從而加快後續配置獲取效能。
預設為false,開啟前請先評估總配置大小並調整config service記憶體配置。
4. item.key.length.limit - 配置項 key 最大長度限制
預設配置是128。
5. item.value.length.limit - 配置項 value 最大長度限制
預設配置是20000。
三、開發啟動的常見問題
3.1 本地執行時Portal一直報Env is down.
預設config service啟動在8080埠,admin service啟動在8090埠。請確認這兩個埠是否被其它應用程式佔用。
如果還伴有異常資訊:org.springframework.web.client.HttpClientErrorException: 405 Method Not Allowed,一般是由於本地啟動了 ShadowSocks
,因為 ShadowSocks
預設會佔用8090埠。
1.1.0版本增加了系統資訊頁面,可以通過 管理員工具
-> 系統資訊
檢視當前各個環境的Meta Server以及admin service資訊,有助於排查問題。
3.2 啟動註冊Eureka地址錯誤
檢查ApolloConfigDB.ServerConfig表中 eureka.service.url 是否配置正確。
3.3 檢查是否存在沒有配置的環境
java.lang.IllegalArgumentException: Not enough variable values available to expand 'pro_meta'
檢查ApolloPortalDB.ServerConfig表中 apollo.portal.envs 配置項是否都有配置,預設應該只配置dev(不區分大小寫)
到這裡配置已經可以進行本地聯調測試,如果有任何問題可以留言一起討論。
更多可以參考
1、 Apollo部署指南
2、 Apollo開發指南