配置中心:統(tǒng)一管理各種應(yīng)用配置的基礎(chǔ)服務(wù)組件。
Apollo工作原理
- 統(tǒng)一管理不同環(huán)境惹谐、不同集群的配置
- 配置修改實時生效(熱發(fā)布)
- 版本發(fā)布管理
- 灰度發(fā)布(Nacos不支持)
- 權(quán)限管理驼卖、發(fā)布審核
- 【Config Service】提供配置的讀取、推送等功能怎囚,服務(wù)對象是Apollo 客戶端
- 【Admin Service】提供配置的修改桥胞、發(fā)布等功能考婴,服務(wù)對象是Apollo Portal(管理界面)
- Eureka提供服務(wù)注冊和發(fā)現(xiàn)沥阱,Config Service和Admin Service都是多實例伊群、無狀態(tài)部署,所以**需要將自己注冊到 Eureka 中 并保持心跳
- 在Eureka之上架了一層Meta Server用于封裝Eureka的服務(wù)發(fā)現(xiàn)接口
- Client通過域名訪問Meta Server獲取【Config Service】服務(wù)列表(IP+Port),而后直接通過IP+Port訪問服務(wù)蛮寂,同時在Client側(cè)會做load balance
- Portal通過域名訪問Meta Server獲取【Admin Service】服務(wù)列表(IP+Port)酬蹋,而后直接通過IP+Port訪問服務(wù),同時在Portal側(cè)會做load balance
- 為了簡化部署范抓,我們實際上會把Config Service匕垫、Eureka和Meta Server三個邏輯角色部署在同一個JVM進程
核心概念
- 獲取層級:應(yīng)用app > 環(huán)境env > 集群 cluster > 命名空間namespace(可繼承公共命名空間,一個namespace相當于一個配置文件)
- 配置層級:環(huán)境env > 其他... 【env】只能從 {OS_ENV, JVM_FIELD} 中獲取寞秃,其他的可以在配置文件配置偶惠。
使用
- 創(chuàng)建數(shù)據(jù)庫表。在數(shù)據(jù)庫運行指定SQL文件即可忽孽。
- 啟動服務(wù)。
github下載(找加速下載)三個文件:adminservice厘线、configservice出革、portal,取出xxx-2.0.1.jar放入同一目錄费薄。隨后創(chuàng)建bat文件并啟動:
echo
set url="118.190.134.156:3306"
set username="root"
set password="dingyuanseu123456"
set charEnco="characterEncoding=utf8&serverTimezone=UTC"
set configHost="http://localhost"
set configPort="8080"
start "configService" java -Xms256m -Xmx256m -Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://%url%/ApolloConfigDB?%charEnco% -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -jar apollo-configservice-2.0.1.jar -Dserver.port=%configPort%
start "adminService" java -Xms256m -Xmx256m -Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://%url%/ApolloConfigDB?%charEnco% -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -jar apollo-adminservice-2.0.1.jar -Dserver.port=8090
java -Xms256m -Xmx256m -Dapollo_profile=github,auth -Ddev_meta=%configHost%:%configPort%/ -Dspring.datasource.url=jdbc:mysql://%url%/apolloPortalDB?%charEnco% -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -Dapollo_profile=github,auth -Ddev_meta=%configHost%:%configPort%/ -Dsever.port=8070 -jar apollo-portal-2.0.1.jar
訪問控制臺【localhost:8070/】即可楞抡,默認賬密【apollo/admin】,打開的網(wǎng)頁召廷,即是【Apollo 配置中心】的web頁面。
- 根據(jù)要求【創(chuàng)建應(yīng)用】【新增配置】【發(fā)布】先紫。
- Maven 項目中獲取配置信息遮精。
首先配置依賴败潦,有了該依賴即可調(diào)用 Apollo Service。
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.0.1</version>
</dependency>
SpringBoot 集成 Apollo
【啟動類 XxxApplication】:添加注解【@EnableApolloConfig】開啟Apollo檬洞,并添加【env】系統(tǒng)變量沟饥。env本身可以配置在 { 環(huán)境變量,VMoptions澎灸,JVM屬性 }遮晚,配置方式分別為:
環(huán)境變量:在系統(tǒng)環(huán)境變量,或者用戶環(huán)境變量中配置糜颠,獲取方式:System.getenv("env")
VMoptions:在IDEA的configurations中配置:
-Denv=DEV
JVM屬性:在啟動類中前面添加:
System.*setProperty*("env", "DEV")
;【application.yml】:配置【app.id】【cluster】【namespace】【meta】【cache-url】以及其他一些屬性萧求,方式如下:
app:
id: spring-cloud-config
apollo:
bootstrap:
enabled: true **#****開啟****apollo**
namespaces: application, TEST2.apollo-settings1, log4j-config **#application****是默認命名空間**
eagerLoad:
enabled: false
cluster: DEFAULT
meta: [http://localhost:8080](http://localhost:8080)
cache-dir: d:/cache/apolloCache
- Question:為什么不在application.yml中配置【env】屬性呢?
主觀上元旬,往往開發(fā)在一臺機器,測試坑资、上線在其他機器穆端,【env】值由機器決定,因此【env】作為系統(tǒng)環(huán)境變量更合適攒巍;
客觀上荒勇,apollo-client 未顯式提供【env】配置,只支持從【os環(huán)境變量】和【JVM屬性】中獲裙料琛;配置文件配置了也獲取不到。