您現在的位置是:網站首頁> 內容頁

基于winserver部署Apollo初次體驗(附.net客戶端demo)

  • 宏威國際官網歡迎您
  • 2019-08-20
  • 404人已閱讀
簡介前言配置中心伴隨著這幾年分布式系統演變和微服務架構的興起,已經成為必不可少的需求之一。試下一下如果哪天公司的所有應用服務,從公司服務器遷移到云服務,成千上萬的配置,修改起來是多么耗時費

前言

配置中心伴隨著這幾年分布式系統演變和微服務架構的興起,已經成為必不可少的需求之一。試下一下如果哪天公司的所有應用服務,從公司服務器遷移到云服務,成千上萬的配置,修改起來是多么耗時費勁的事(我們公司就是……)。

配置中心主要有以下特點:

配置動態化管理集中化

修改配置不需要重新發布配置文件,而且可以復用,同一個的配置只需要修改一次,省時省力。通過后臺統一管理,修改、查看,部分產品還支持配置版本管理。

Why Apollo

國產開源功能強大

首先是支持國產,同時在遇到問題也可以良好的和國人交流溝通。其次功能很全,滿足公司的所有需要,不需要二次開發。

優勢

阿波羅的功能非常強大,幾乎滿足一般的分布式系統的使用要求,重點主要如下:

配置多維度application (應用)environment (環境)cluster (集群)namespace (命名空間)版本發布管理歷史查看版本回滾后臺權限管理發布審核操作審計更新機制推拉客戶端監控客戶端實例查看配置實用實例查看

缺點

強大的功能,必然伴隨少許缺點:

一定的學習成本部署繁雜

官方文檔說明部署簡單,我認為不然,依賴jdk1.8,(我試了1.9部署Quick Start版本失敗了),mysql,腳本需要自己導入,在windows平臺還需要gitbash。

總的來說利大于弊,還是值得去使用的。

準備

jdk18+

gitbash

mysql 5.7.11+

Quick Start版本的阿波羅

部署

注意jdk的環境變量配置

導入腳本

在剛下載apollo-build-scripts里sql目錄下的兩個腳本導入到mysql里

apolloconfigdb.sql

apolloportaldb

修改項目數據庫配置

編輯demo.sh,找到下面的配置項,修改為對應的數據庫信息

# apollo config db infoapollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8apollo_config_db_username=rootapollo_config_db_password=123456789# apollo portal db infoapollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8apollo_portal_db_username=rootapollo_portal_db_password=123456789

啟動

打開cmd,切換到剛下載的apollo-build-scripts目錄下。

cd C:Userschengongsourceeposapollo-build-scriptsdemo.sh start

==== starting service ====Service logging file is ./service/apollo-service.logStarted [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.logStarted [10846]Waiting for portal startup......Portal started. You can visit http://localhost:8070 now!

如果控制臺輸出以上為啟動成功

初體驗

輸入瀏覽器輸入http://localhost:8070

賬號:apollo

密碼:admin

可以見到默認的有一個Sample App項目,點進去,就可以見到下圖

.net客戶端

創建一個控制臺項目,下載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:optdata

從以上來看,阿波羅在可用性設計上還是很不錯的。

結束

最近公司在選型配置中心,因此在玩阿波羅的時候同時記錄其過程。

客戶端demo:https://github.com/SkyChenSky/Apollo.Demo

文章評論

Top 黑龙江快乐十分走势