在 Aspire 項(xiàng)目下使用 AgileConfig
什么是 Aspire
.NET Aspire 是一組工具、模板和包,用于構(gòu)建易于監(jiān)控的、可投入生產(chǎn)的應(yīng)用程序。.NET Aspire 通過一系列 NuGet 包交付,這些包通過啟動或解決現(xiàn)代應(yīng)用開發(fā)中的特定問題來提升開發(fā)效率。 如今的應(yīng)用通常使用大量服務(wù),例如數(shù)據(jù)庫、消息傳送和緩存,其中許多服務(wù)通過 .NET Aspire 集成得到支持。
Aspire 是微軟發(fā)布的一項(xiàng)新技術(shù)。最近社區(qū)也有人跟我提需求說 AgileConfig 要支持 Aspire。
因?yàn)檫@不是 Aspire 的介紹文章,所以不過多表述。想要了解可參考以下文檔:
https://learn.microsoft.com/zh-cn/dotnet/aspire/get-started/aspire-overview
使用 AgileConfig 的傳統(tǒng)方式
通常我們使用 AgileConfig 至少需要以下步驟:
- 使用 docker run 命令把服務(wù)端跑起來
- 配置 admin 密碼
- 添加應(yīng)用,設(shè)置 appId,secret
- 在客戶端項(xiàng)目添加 client 包,修改 appsettings 配置文件
通過以上步驟后,你的應(yīng)用至少應(yīng)該是能成功連上 AgileConfig 服務(wù)端了。
在 Aspire 下使用 AgileConfig
下面讓我們看看如何在 Aspire 下使用 AgileConfig。
相信大家肯定看過一些 Aspire 的案例。一些 infrastructure 的組件(比如 Sqlserver 數(shù)據(jù)庫),可以通過 Aspire 直接運(yùn)行起來,通過代碼進(jìn)行一些簡單的配置后,其他項(xiàng)目就可以使用了。
那么使用 AgileConfig 也是一樣。讓我們直接看代碼吧。
新建 Aspire 項(xiàng)目
使用 VS 新建一個標(biāo)準(zhǔn) Aspire 項(xiàng)目。最后我們會得到這樣一個解決方案:
- AspireProjectWithAgileConfig.ApiService
- AspireProjectWithAgileConfig.AppHost
- AspireProjectWithAgileConfig.Web
他們之間的依賴關(guān)系如下:

在 AppHost 項(xiàng)目上使用 AgileConfig
dotnet add package AgileConfig.Aspire.Hosting --version 1.0.0
首先安裝 AgileConfig.Aspire.Hosting。 這個包是 AgileConfig 服務(wù)端的一個擴(kuò)展。使用它配合 Aspire 可以直接啟動 AgileConfig 容器并且簡單配置它。
安裝完后,我們在 Program 下添加如下代碼:
using Aspire.Hosting.AgileConfig;
var builder = DistributedApplication.CreateBuilder(args);
var agileConfig = builder.AddAgileConfig(); // 添加 AgileConfig 服務(wù)端,這會啟動一個 Container
var agileConfig_apiservice = agileConfig.AddApp("apiservice"); // 在 AgileConfig 添加一個應(yīng)用 apiservice,客戶端會從這里讀取業(yè)務(wù)
var agileConfig_webfrontend = agileConfig.AddApp("webfrontend"); // 在 AgileConfig 添加一個應(yīng)用 webfrontend,客戶端會從這里讀取業(yè)務(wù)
var apiService = builder.AddProject<Projects.AspireProjectWithAgileConfig_ApiService>("apiservice");
var webFrontend = builder.AddProject<Projects.AspireProjectWithAgileConfig_Web>("webfrontend").WithExternalHttpEndpoints();
apiService.WithReference(agileConfig_apiservice); // apiservice 項(xiàng)目引用 agileConfig_apiservice 應(yīng)用
apiService.WaitFor(agileConfig); // apiservice 項(xiàng)目等待 agileConfig container 啟動后再啟動自己
webFrontend.WithReference(agileConfig_webfrontend); // webFrontend 項(xiàng)目引用 agileConfig_webfrontend 應(yīng)用
webFrontend.WaitFor(agileConfig); // webFrontend 項(xiàng)目等待 agileConfig container 啟動后再啟動自己
webFrontend.WithReference(apiService);
webFrontend.WaitFor(apiService);
builder.Build().Run();
讓我們解釋一下關(guān)鍵代碼:
- 添加 AgileConfig 服務(wù)端
var agileConfig = builder.AddAgileConfig();
作用:啟動一個 AgileConfig 服務(wù)端的 Docker 容器,作為配置中心。
- 在 AgileConfig 中注冊應(yīng)用
var agileConfig_apiservice = agileConfig.AddApp("apiservice");
var agileConfig_webfrontend = agileConfig.AddApp("webfrontend");
作用:在 AgileConfig 中注冊兩個應(yīng)用 apiservice 和 webfrontend,它們的配置信息會被客戶端讀取。
細(xì)節(jié):這兩個應(yīng)用對應(yīng)實(shí)際的后端 API 和前端 Web 項(xiàng)目,后續(xù)客戶端(如 apiService 和 webFrontend)會從 AgileConfig 中讀取它們的配置。
- 配置依賴關(guān)系
// API 服務(wù)依賴 AgileConfig 中的 apiservice 配置
apiService.WithReference(agileConfig_apiservice);
apiService.WaitFor(agileConfig); // 等待 AgileConfig 容器啟動
// Web 前端依賴 AgileConfig 中的 webfrontend 配置
webFrontend.WithReference(agileConfig_webfrontend);
webFrontend.WaitFor(agileConfig); // 等待 AgileConfig 容器啟動
// Web 前端依賴 API 服務(wù)
webFrontend.WithReference(apiService);
webFrontend.WaitFor(apiService); // 等待 API 服務(wù)啟動
作用:定義服務(wù)啟動順序和依賴關(guān)系。
關(guān)鍵方法:
WithReference():聲明某個服務(wù)依賴另一個服務(wù)(如配置或另一個項(xiàng)目)。
WaitFor():確保被依賴的服務(wù)啟動后再啟動當(dāng)前服務(wù)。
- 新的依賴關(guān)系如下

在客戶端項(xiàng)目上使用 AgileConfig.Client
要連接 AgileConfig 服務(wù)端,我們需要在客戶端項(xiàng)目添加新的包引用:
dotnet add package AgileConfig.Client.Aspire --version 1.0.0
以 ApiService 項(xiàng)目為例:
using Aspire.AgileConfig.Client;
var appName = "apiservice";
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseAspireAgileConfig(appName);
客戶端項(xiàng)目現(xiàn)在配置起來就超級簡單了,只需要一行代碼就解決問題了,你甚至不需要去配置 appsettings 來指定 agileconfig 的相關(guān)配置它就能運(yùn)行了。
運(yùn)行
下面讓我們運(yùn)行整個項(xiàng)目看看效果吧。

通過 Aspire 的控制臺我們可以看到 AgileConfig 的相關(guān)資源以及 2 個 project 項(xiàng)目都已經(jīng)啟動了。

點(diǎn)擊 AgileConfig 的終結(jié)點(diǎn)可以直接打開 AgileConfig 的控制臺。使用 admin/123456 默認(rèn)密碼就可以登錄進(jìn)去。

打開應(yīng)用配置界面,可以看到 apiService, webfrontend 項(xiàng)目已經(jīng)自動建立起來。

打開終端界面,可以看到有兩個客戶端連接在服務(wù)端上。

點(diǎn)擊 webFrontend 的終結(jié)點(diǎn)可以直接打開這個 blazor 項(xiàng)目,可以正常運(yùn)行。
總結(jié)
以上我們通過一個簡單的示例演示了在 Aspire 下如何使用 AgileConfig。跟傳統(tǒng)方案比起來,你不再需要關(guān)心:如何使用 docker 運(yùn)行 AgileConfig 的服務(wù)端,不再需要關(guān)心如何在 appsettings 下添加 AgileConfig 的相關(guān)配置。
可以看到過程還是非常絲滑的。
源代碼在這:
https://github.com/kklldog/Aspire.Hosting.AgileConfig
https://github.com/dotnetcore/AgileConfig
關(guān)注我的公眾號一起玩轉(zhuǎn)技術(shù)

QQ群:1022985150 VX:kklldog 一起探討學(xué)習(xí).NET技術(shù)
作者:Agile.Zhou(kklldog)
出處:http://www.rzrgm.cn/kklldog/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

浙公網(wǎng)安備 33010602011771號