ABP微服務系列學習-對接Apollo配置中心

飯勺oO發表於2023-03-08

前面我們把服務都已經成功啟動,並且對接前端Angular介面。
但是在微服務結構中,多個服務意味著需要配置多個配置檔案,這時就需要引入配置中心這玩意了。
配置中心有很多現成的方案,比如攜程的阿波羅,K8S自帶的ConfigMap等等。
這裡介紹一下如何對接攜程的阿波羅配置中心。

部署Apollo服務

在開發環境,我們可以使用Docker一鍵搭建我們Apollo服務。
安裝部署過程直接看官方文件https://www.apolloconfig.com/#/zh/deployment/quick-start-docker
這裡就不贅述了。
使用docker-compsoe up啟動服務後看到日誌說明啟動成功。

apollo-quick-start    | Started [66]
apollo-quick-start    | Waiting for config service startup...
apollo-quick-start    | Config service started. You may visit http://localhost:8080 for service status now!
apollo-quick-start    | Waiting for admin service startup.
apollo-quick-start    | Admin service started
apollo-quick-start    | ==== starting portal ====
apollo-quick-start    | Portal logging file is ./portal/apollo-portal.log
apollo-quick-start    | Application is running as root (UID 0). This is considered insecure.
apollo-quick-start    | Started [247]
apollo-quick-start    | Waiting for portal startup...
apollo-quick-start    | Portal started. You can visit http://localhost:8070 now!

瀏覽器開啟http://localhost:8080或者http://127.0.0.1:8080可以看到介面
image.png瀏覽器開啟http://localhost:8070或者http://127.0.0.1:8070可以看到管理介面
image.png

新增配置

在管理介面輸入賬號apollo,密碼admin即可進入管理後臺。
然後我們根據服務建立應用,每一個服務對應一個應用
image.png
這裡按照服務建立了5個應用
image.png

刪除預設Namespcae

點選應用名稱進去應用管理,先刪除預設自帶的Namespace application,因為預設的Namespace是properties型別,不符合我們JSON的配置。雖然能讀取,但是識別內容都是字串。
image.png

建立新的Namespace

在應用管理介面左下角,可以看到新增Namespace的按鈕,點選新增Namespace。
image.png
然後輸入我們的配置名稱,以及配置型別,配置型別選擇JSON
image.png
建立完成後我們返回應用管理頁面修改配置,把我們服務中appsettings.json檔案內容複製到配置裡面。
image.png
閘道器服務的配置,多個配置檔案就新增多個Namespace
image.png
這裡每一個Namespace就相當於一個檔案的概念。
更詳細的說明可以看官網文件介紹 https://www.apolloconfig.com/#/zh/design/apollo-core-concept-namespace?id=_1-%e4%bb%80%e4%b9%88%e6%98%afnamespace

釋出配置

修改配置內容後,一定要點選發布,不然配置不會生效。

微服務對接Apollo配置中心

安裝nuget

Apollo官網有.net的sdk,nuget包名字是Com.Ctrip.Framework.Apollo.Configuration。
在微服務shared模組的FunShow.Shared.Hosting.AspNetCore專案中新增Com.Ctrip.Framework.Apollo.Configuration引用。

配置

然後封裝一下IHostBuilder的擴充套件方法

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

namespace FunShow.Shared.Hosting.AspNetCore
{
public static class ApolloConfigurationExtension
    {
        public static IHostBuilder UseApollo(this IHostBuilder builder)
        {
            return builder
                .ConfigureAppConfiguration((config) =>
                {
                    config.AddApollo(config.Build().GetSection("apollo"));
                });
        }
    }
}

然後在每個服務的Program程式碼中的HostBuilder新增UseApollo方法

var builder = WebApplication.CreateBuilder(args);
            builder.Host
                .AddAppSettingsSecretsJson()
                .UseAutofac()
                .UseApollo() //新增Apollo配置中心
                .UseSerilog();

最後修改每個服務的appsettings.json檔案,只需要配置apollo的引數,比如:

{
  "apollo": {
    "AppId": "FunShowWebGateway",
    "ConfigServer": [ "http://localhost:8080" ],
    "Namespaces": [ "appsettings.json", "yarp.json" ]
  }
}

這裡AppId指的是我們建立應用時指定的AppId。
ConfigServer是請求配置中心的服務地址,注意不是8070埠,8070是管理後臺的埠。
Namespaces則是指明我們需要載入的配置檔名稱。
為什麼不是appsettings而是appsettings.json呢,我們上面建立的Namespaces明明只是寫了名字是appsettings。
因為這裡的.json是向底層說明我們這個檔案用json格式解析,如果不加.json字尾,則預設使用properties格式解析內容,官方預設支援json和xml字尾的檔案解析。別的字尾可以自行擴充套件。

啟動服務

所有配置都發布以及我們的服務程式碼都修改完成後,我們就可以嘗試啟動服務啦~
執行我們的run-tye.ps1指令碼,可以看到服務全部正常啟動。
image.png
image.png
這裡就不上那麼多圖片了,稍微放兩個圖就可以了。
好了,到這我們就成功接入apollo配置中心了。

相關文章