前言:由于公司占時沒有運維,出于微服務的需要,Apollo只能先裝在windows 阿里云上跑起來,由于環境及網路等問題,在安裝程序中遇到很多坑,算是一個個坑填完后,最終實作,
一. java jdk環境
java jdk 1.8下載地址: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
建議JDK安裝目錄不要帶有中文、【空格】、特殊符號等,例如:Program Files 這種會導致使用Quick Start 里面的./demo.sh start出錯,會提示【/c/Program: No such file or directory】 就是因為空格的問題
java jdk官方下載包時需要登錄, 我的用戶名為:郵箱,密碼:Hsr123456,安裝jdk時選擇目錄如下:

安裝后,配置環境變數,查看版本資訊:

二.mysql 環境
2.1 安裝mysql 5.7及以上
2.2 創建ApolloPortalDB 資料庫
sql檔案在apollo-build-scripts-master包中,該包下載看第三節,
匯入命令如下所示:

匯入成功后,可以通過執行以下sql陳述句來驗證


2.3 創建ApolloConfigDB資料庫
匯入命令如下所示:

匯入成功后,可以通過執行以下sql陳述句來驗證:

2.4 配置資料庫連接資訊
需要編輯修改demo.sh(看第三節),修改ApolloPortalDB和ApolloConfigDB相關的資料庫連接串資訊,
三. 下載快速啟動包
apollo下載地址:https://github.com/nobodyiam/apollo-build-scripts 有58M下載有些慢
配置demo.sh檔案內容中的mysql連接設定
# apollo config db info apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 apollo_config_db_username=root apollo_config_db_password=123456 # apollo portal db info apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8 apollo_portal_db_username=root apollo_portal_db_password=123456
四. Quick-Start 啟動Apollo配置中心
下載git bash, 需要bash環境,下載地址: https://gitforwindows.org/, 安裝后默認路徑在C:\Users\Administrator下,在bush中使用ls查看檔案

將apollo-build-scripts-master目錄移到C:\Users\Administrator下
啟動apolloQuick Start腳本會在本地啟動3個服務,分別使用8070, 8080, 8090埠,請確保這3個埠當前沒有被使用,啟動功能如下所示:

如果啟動失敗,查看service/apollo-service.log 或 portal/apollo-portal.log日志進一步分析, 作業系統重啟后,需要再打開git bush手動啟用demo.sh檔案,
啟動成功后訪問http://localhost:8070/signin 輸入用戶名apollo,密碼admin后登錄

配置二個app專案如下所示:

五. asp.net core的客戶端使用
asp.net core系列 73 Exceptionless+Nlog以及Apollo介紹有介紹,幾個重要的環節是:
1.配置appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"apollo": {
"AppId": "SearchService",
"MetaServer": "http://192.168.2.211:8080/",
"Env": "Dev",
"Meta": {
"DEV": "http://192.168.2.211:8080/"
}
}
}
2.添加參考
Install-Package Microsoft.Extensions.Configuration -Version 2.2.0 Install-Package Com.Ctrip.Framework.Apollo.Configuration -Version 2.0.3
3.Program.cs 配置
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration(builder=>builder .AddApollo(builder.Build().GetSection("apollo")) //.AddNamespace("") .AddDefault()) .UseStartup<Startup>();
4.本地快取
Apollo客戶端會把從服務端獲取到的配置在本地檔案系統快取一份,用于在遇到服務不可用,或網路不通的時候,依然能從本地恢復配置,不影回應用正常運行,
本地快取路徑位于C:\opt\data\{appId}\config-cache,所以請確保C:\opt\data\目錄存在,且應用有讀寫權限
5. ValuesController 使用
public ValuesController(IConfiguration configuration) { _configuration = configuration; string mysqlConn = _configuration.GetSection("mysql").Value; }
6. 添加的專案如下所示:

7. 動態修改配置引數
在apollo專案中將mysql的埠修改為3309,點擊發布, 在asp.net core 啟動專案中重繪頁面,獲取的配置已動態變化,無需重啟asp.net core專案,如下所示:
[HttpGet] public ActionResult<IEnumerable<string>> Get() { string mysqlConn = _configuration.GetSection("mysql").Value; return new string[] { mysqlConn}; }

.net core配置參考:https://github.com/ctripcorp/apollo.net/blob/dotnet-core/Apollo.Configuration/README.md
六.生產環境遇到的問題
在windows服務器部署apollo,使用gitbush來啟動demo.sh檔案時,總是失敗,也沒有service/apollo-service.log日志檔案,這樣很難排查問題,驗證處理如下:
1. 在安裝的gitbush目標下,打開gitbush的 git-bash.exe檔案來啟動,我服務器目錄是:E:\GitBush\git-bash.exe,
2. 在Demo.sh檔案中除了配置mysql,其它都不要修改,
3. 在環境變數中有另一個java環境,去掉如下:C:\Program Files (x86)\Common Files\Oracle\Java\javapath,增加E:\java\jdk1.8.0_241\bin,在重啟打開git-bash.exe檔案來啟動, 反復測驗是這個問題導致
-- 修改部門, USE apolloportaldb; SELECT * FROM serverconfig WHERE id=2; UPDATE serverconfig SET `Value`='[{"orgId":"TEST1","orgName":"樣例部門1"},{"orgId":"TEST2","orgName":"yla520"}]' WHERE id=2 -- 在gitbush中停止服務 再啟動 $ /e/apollo-build-scripts-MASTER/demo.sh STOP $ /e/apollo-build-scripts-MASTER/demo.sh START
4. 最重要一點
由于服務器在阿里云上,啟動apollo后通過訪問http://localhost:8080/,會發現eureka 下面的instance info是走的內網ip,這樣一來非局域網的.net客戶端就無法訪問到組態檔,
目前的一個解決方法是在服務器作業系統上,添加環境變數,變數值為阿里云公開的ip地址,如下所示:EUREKA_INSTANCE_IP_ADDRESS

這樣apollo關閉再啟動后,再次訪問http://localhost:8080/,會發現eureka 下面的instance info是走的公網ip
參考:快速啟動
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/50959.html
標籤:.NET Core
