asp.net core系列 76 Apollo 快速安裝模式下填坑和ASP.NetCore結合使用


前言:由於公司占時沒有運維,出於微服務的需要,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

  

   參考:快速啟動

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM