配置中心伴隨着這幾年分佈式系統演變和微服務架構的興起,已經成爲必不可少的需求之一。試下一下若是哪天公司的全部應用服務,從公司服務器遷移到雲服務,成千上萬的配置,修改起來是多麼耗時費勁的事(咱們公司就是……)。html
配置中心主要有如下特色:java
修改配置不須要從新發布配置文件,並且能夠複用,同一個的配置只須要修改一次,省時省力。經過後臺統一管理,修改、查看,部分產品還支持配置版本管理。mysql
首先是支持國產,同時在遇到問題也能夠良好的和國人交流溝通。其次功能很全,知足公司的全部須要,不須要二次開發。git
阿波羅的功能很是強大,幾乎知足通常的分佈式系統的使用要求,重點主要以下:github
強大的功能,必然伴隨少量缺點:sql
官方文檔說明部署簡單,我認爲否則,依賴jdk1.8,(我試了1.9部署Quick Start版本失敗了),mysql,腳本須要本身導入,在windows平臺還須要gitbash。數據庫
總的來講利大於弊,仍是值得去使用的。windows
注意jdk的環境變量配置
在剛下載apollo-build-scripts裏sql目錄下的兩個腳本導入到mysql裏
apolloconfigdb.sql
apolloportaldb
編輯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=123456789 # apollo portal db info apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8 apollo_portal_db_username=root apollo_portal_db_password=123456789
打開cmd,切換到剛下載的apollo-build-scripts目錄下。
cd C:\Users\chengong\source\repos\apollo-build-scripts demo.sh start
==== starting service ==== Service logging file is ./service/apollo-service.log Started [10768] Waiting for config service startup....... Config service started. You may visit http://localhost:8080 for service status now! Waiting for admin service startup.... Admin service started ==== starting portal ==== Portal logging file is ./portal/apollo-portal.log Started [10846] Waiting for portal startup...... Portal started. You can visit http://localhost:8070 now!
若是控制檯輸出以上爲啓動成功
輸入瀏覽器輸入http://localhost:8070
帳號:apollo
密碼:admin
能夠見到默認的有一個Sample App項目,點進去,就能夠見到下圖
建立一個控制檯項目,下載apollo.net包
nuget install apollo.net
static void Main(string[] args) { Config config = ConfigService.GetAppConfig(); config.ConfigChanged += OnChanged; while (true) { Thread.Sleep(500); var timeout = config.GetProperty("timeout", ""); Console.WriteLine(timeout); } } private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent) { Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace); foreach (string key in changeEvent.ChangedKeys) { ConfigChange change = changeEvent.GetChange(key); Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType); } }
另外在app.config填寫如下變量
<!-- Change to the actual app id --> <add key="AppID" value="SampleApp"/> <!-- Should change the apollo config service url for each environment --> <add key="Apollo.DEV.Meta" value="http://localhost:8080"/> <add key="Apollo.FAT.Meta" value="http://localhost:8080"/> <add key="Apollo.UAT.Meta" value="http://localhost:8080"/> <add key="Apollo.PRO.Meta" value="http://localhost:8080"/>
啓動控制檯程序
此時返回控制檯程序查看
這個時候咱們經過監聽程序監聽到配置在後臺被修改了,同時能獲取到最新配置值
從上圖看到,阿波羅配置更新具有推和拉兩種方式,在後臺修改併發布後,會及時將配置推給客戶端,假如沒推成功,客戶端會經過後臺線程定時更新。
若是客戶端與服務端發生了網絡分區,此時能夠經過客戶端獲取本地文件緩存的配置數據,讓系統正常運做。
緩存數據默認存儲在C:\opt\data
從以上來看,阿波羅在可用性設計上仍是很不錯的。
最近公司在選型配置中心,所以在玩阿波羅的時候同時記錄其過程。
客戶端demo:https://github.com/SkyChenSky/Apollo.Demo