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

来源:https://www.cnblogs.com/MrHSR/archive/2020/03/27/12538458.html
-Advertisement-
Play Games

前言:由於公司占時沒有運維,出於微服務的需要,Apollo只能先裝在windows 阿裡雲上跑起來,由於環境及網路等問題,在安裝過程中遇到很多坑,算是一個個坑填完後,最終實現。 一. java jdk環境 java jdk 1.8下載地址: https://www.oracle.com/java/t ...


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

 

     這樣apollo關閉再啟動後,再次訪問http://localhost:8080/,會發現eureka 下麵的instance info是走的公網ip

  

   參考:快速啟動

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼場景下會有main函數? 當該python腳本被作為模塊(module)引入(import)時,其中的main()函數將不會被執行。 main函數的作用? __ name__ == '__ main__'是Python的main函數入口。並非說,加入這句才能使用python xxx.py來執行, ...
  • 引言 構建分散式系統並不容易。然而,人們日常所使用的應用大多基於分散式系統,在短時間內依賴於分散式系統的現狀並不會改變。ApacheZooKeeper旨在減輕構建健壯的分散式系統的任務。ZooKeeper基於 分散式計算的核心概念而設計,主要目的是給開發人員提供一套容易理解和開發的介面,從而簡化分佈 ...
  • 下麵是互相轉換的代碼: 有想要瞭解更多關於python知識的請在下方評論或私信小編 ...
  • title: Java基礎語法(3) 運算符 blog: "CSDN" data: "Java學習路線及視頻" 1.算術運算符 算術運算符的註意問題 如果對負數取模,可以把模數負號忽略不記,如:5% 2=1。 但被模數是負數則不可忽略。此外,取模運算的結果不一定總是整數。 對於除號“/”,它的整數除 ...
  • 字元串的常用操作 很好理解 字元串可以用 ' + ' 連接,或者乘一個常數重覆輸出字元串 字元串的索引操作 通過一對中括弧可以找到字元串中的某個字元 可以通過正負數雙向操作噢 用一個中括弧來實現 為什麼沒有-0??去清醒腦子想想 -0 和 0 有差嗎? 還有一個切片操作 就像切菜那樣簡單,同樣是中括 ...
  • 中間件分類 ASP.NET Core 中間件的配置方法可以分為以上三種,對應的Helper方法分別是:Run(), Use(), Map()。 Run(),使用Run調用中間件的時候,會直接返回一個響應,所以後續的中間件將不會被執行了。 Use(),它會對請求做一些工作或處理,例如添加一些請求的上下 ...
  • 簡單的介紹一下集合,通俗來講就是用來保管多個數據的方案。比如說我們是一個公司的倉庫管理,公司有一堆貨物需要管理,有同類的,有不同類的,總而言之就是很多、很亂。我們對照集合的概念對倉庫進行管理的話,那麼 數組就是將一堆貨整整齊齊的碼在倉庫的某個地方,普通列表也是如此;Set就是在倉庫里有這麼一個貨架, ...
  • 前言 nuget 是 .net 的常用包管理器,目前已經內置到 Visual Studio 2012 以後的版本。大多數 .net 包都托管在 nuget.org,包括 .net core 框架基礎包,得益於 .net core 的模塊化設計,很多非核心包都可以進行一定程度的獨立升級。 製作並上傳 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...