當前位置: 妍妍網 > 碼農

【譯】釋出 .NET Aspire 預覽版 2(二)

2024-02-11碼農

點選上方「DotNet NB」 關註公眾號

1

/

D o t N e t N B 222

原文 | Damian Edwards

轉譯 | 鄭子銘

元件更新

元件包現在有單獨的圖示

大多數 Aspire 元件的 NuGet 包現在都具有代表性圖示,以便在 NuGet 包管理器對話方塊中更輕松地辨識它們,並給體驗帶來一些視覺差異:

MySqlConnector 的元件和托管支持

感謝社群成員 Bradley Grainger(流行的 MySQL MySqlConnector 客戶端庫的作者),現在有一個適用於 MySQL 的 Aspire 元件,支持配置、DI、跟蹤、日誌記錄和執行狀況檢查,支持從以下位置對 MySQL 資料庫進行可觀察且彈性的存取:您的服務應用程式。

var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
builder.AddMySqlDataSource("catalog");
ar app = builder.Build();
app.MapGet("/catalog", async (MySqlConnection db) =>
{
conststring sql = """
SELECT Id, Name, Description, Price
FROM catalog
"
"";
return await db.QueryAsync<CatalogItem>(sql);
});
app.MapDefaultEndpoints();
app.Run();




此外,還添加了對 MySQL 資源的 Aspire.Hosting 支持,使得啟動 MySQL 容器進行本地開發或連線到現有 MySQL 例項變得比以往更加容易。

var builder = DistributedApplication.CreateBuilder(args);
var catalogDb = builder.AddMySqlContainer("mysql")
// Mount the SQL scripts directory into the container so that the init scripts run.
.WithVolumeMount("../DatabaseContainers.ApiService/data/mysql", "/docker-entrypoint-initdb.d", VolumeMountType.Bind)
.AddDatabase("catalog");

MongoDB 的元件和托管支持

另一項社群貢獻是由 Ailton Pinto 做出的,透過新的 Aspire.MongoDB.Driver 包為 Aspire 帶來了對 MongoDB 的支持。該元件使用 MongoDB.Driver 客戶端庫,與 MySQL 元件一樣,支持配置、DI、跟蹤、日誌記錄和執行狀況檢查。

var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
builder.AddMongoDBClient("mydatabase");
ar app = builder.Build();
app.MapGet("/", async (IMongoClient client) =>
{
// Use the client here
...
});
app.MapDefaultEndpoints();
app.Run();



在托管方面,您可以使用 AddMongoDBContainer 配置 MongoDB 容器,或使用 AddMongoDBConnection 指向現有例項。

var builder =DistributedApplication.CreateBuilder(args);
var mongodb = builder.AddMongoDBContainer("mongodb")
.AddDatabase("mydatabase");
var myService = builder.AddProject<Projects.MyService>()
.WithReference(mongodb);

Azure SDK 元件現在預設啟用分布式跟蹤

Azure SDK 的 Aspire 元件現在預設啟用分布式跟蹤(Azure 服務匯流排元件除外)。使用這些元件連線到當前支持的 Azure 服務將自動為應用程式的分布式跟蹤輸出做出貢獻,有助於使其更易於觀察。

部署更新

.NET Aspire 的一大功能是部署工具能夠添加對您在 Aspire AppHost 計畫中描述和組合的分布式應用程式的支持。這個領域還處於早期階段,但我們已經看到了一些令人興奮的工作。

Aspir8:社群開發的工具,用於將 .NET Aspire 應用程式部署到 Kubernetes

我們看到了很多對支持將 Aspire 應用程式部署到 Kubernetes 感興趣的人的反饋。在社群驅動開發的另一個精彩展示中,Aspirate (Aspir8) 是由 GitHub 使用者 prom3theu5 建立的。此 .NET 全域工具利用 Aspire 清單自動將 Aspire 應用程式部署到 Kubernetes 集群。請務必檢視計畫讀我檔案以了解更多詳細資訊,並按照 Aspire 儲存庫中的 GitHub 問題進行操作。

Azure 開發人員 CLI (azd) Aspire 改進

Azure 開發人員 CLI (azd) 是一種開源工具,可以讓您的應用程式更輕松地在 Azure 雲中執行。我們正在努力確保 azd 能夠以最快、最簡單的方式在幾分鐘內將 Aspire 應用程式配置並部署到 Azure。在此版本中,我們仍然主要針對 Azure 容器應用程式。

在此版本中,我們添加了一些新功能以更好地支持 Aspire 部署:

  • 部署使用 AsDockerFileInManifest 配置的 Dockerfile 計畫。

  • 部署Dapr相關元件。這將在下面的下一節中更詳細地解釋。

  • 初步支持管道配置,以便為 Aspire 應用程式配置 CI/CD 部署變量。

  • 還有其他一些值得註意的改進:

  • 預設情況下為預配的 Azure 容器登錄檔啟用管理員使用者身份驗證。對於未完全遷移到 RBAC 的訂閱中的經典管理員使用者,這可以避免與授權相關的失敗。

  • 僅當使用 dotnetpublish 構建和釋出 .NET 計畫時,不再需要安裝 docker 工具。

  • 透過安裝或更新 Azure 開發人員 CLI 獲取最新的 azd 版本 (1.5.1)。

    Dapr 支持更新

    對於那些想要將 Aspire 與 Dapr 一起使用的使用者,預覽版 2 中進行了許多改進。

    不再需要指定 Dapr 應用程式 ID

    Dapr 應用程式 ID 現在將預設為其各自計畫指定的資源名稱。此外,Dapr sidecar 的資源名稱現在源自其各自計畫的名稱,而在預覽版 1 中,資源名稱是應用程式 ID 本身。這使得計畫資源名稱和應用程式 ID 具有相同的值。如果需要,您仍然可以將應用程式 ID 顯式設定為顯式值。

    var builder =DistributedApplication.CreateBuilder(args);
    // The Dapr application ID will default to "servicea".
    builder.AddProject<Projects.DaprServiceA>("servicea")
    .WithDaprSidecar();
    // The Dapr application ID is explicitly set to "serviceb-dapr".
    builder.AddProject<Projects.DaprServiceB>("serviceb")
    .WithDaprSidecar("serviceb-dapr");

    Dapr 元件是一流的 Aspire 資源

    .NET Aspire Preview 2 引入了 Dapr 元件作為一流的資源,這使得 Aspire 在執行 Dapr 應用程式時能夠做出更明智的決策,並啟用其他工具(例如用於部署的工具)。

    在預覽版 1 中,您可以使用 DaprSidecarOptions 為 sidecar 一起配置 Dapr 資源,其中 sidecar 將載入資源目錄中找到的所有元件。

    var builder = DistributedApplication.CreateBuilder(args);
    // Configure service A's sidecar to load components from the resources path.
    builder.AddProject<Projects.DaprServiceA>("servicea")
    .WithDaprSidecar(
    new DaprSidecarOptions
    {
    AppId = "service-a",
    ResourcesPaths = ImmutableHashSet<string>.Create("<path to resources directory>")
    });
    // Configure service B's sidecar to load components from the resources path.
    builder.AddProject<Projects.DaprServiceB>("serviceb")
    .WithDaprSidecar(
    new DaprSidecarOptions
    {
    AppId = "service-b",
    ResourcesPaths = ImmutableHashSet<string>.Create("<path to resources directory>")
    });

    在預覽版 2 中,您可以建立單獨的 Dapr 元件資源,並從實際使用它們的計畫中參照它們(透過 WithReference())。Aspire 將確保 sidecar 配置為載入其參照的元件。

    var builder = DistributedApplication.CreateBuilder(args);
    var stateStore = builder.AddDaprComponent(
    "statestore",
    "state.redis",
    new DaprComponentOptions { LocalPath = "<path to state store YAML file>" });
    var pubSub = builder.AddDaprComponent(
    "pubsub",
    "pubsub.redis",
    new DaprComponentOptions { LocalPath = "<path to pub-sub YAML file>" });
    builder.AddProject<Projects.DaprServiceA>("servicea")
    .WithDaprSidecar()
    .WithReference(stateStore)
    .WithReference(pubSub);
    builder.AddProject<Projects.DaprServiceB>("serviceb")
    .WithDaprSidecar()
    .WithReference(pubSub);


    對於基本元件,例如狀態儲存和釋出-訂閱,您無需建立或指定本地元件 YAML 路徑。相反,AddDaprStateStore() 和 AddDaprPubSub() 方法建立「通用」型別的 Dapr 元件資源,這表明 Aspire 應在應用程式執行時代表 Dapr sidecar 配置適當的元件。

    var builder =DistributedApplication.CreateBuilder(args);
    var stateStore = builder.AddDaprStateStore("statestore");
    var pubSub = builder.AddDaprPubSub("pubsub");
    builder.AddProject<Projects.DaprServiceA>("servicea")
    .WithDaprSidecar()
    .WithReference(stateStore)
    .WithReference(pubSub);
    builder.AddProject<Projects.DaprServiceB>("serviceb")
    .WithDaprSidecar()
    .WithReference(pubSub);

    在前面的範例中,如果 Dapr 在電腦上完全初始化,Aspire 將配置 sidecar 以使用由 Dapr 預設 Redis 容器支持的 Redis 元件。相反,如果 Dapr 被初始化為「slim」,Aspire 將配置 sidecar 以使用記憶體元件。聲明單個 Dapr 元件資源的真正好處是,它使本地開發和部署工具能夠就如何配置 Dapr 做出更好的決策。

    支持使用 Azure 開發人員 CLI (azd) 將 Dapr 應用程式部署到 Azure 容器應用程式 (ACA)

    預覽版 2 將特定於 Dapr 的資源寫入應用程式清單,這使得 Azure 開發人員 CLI (azd) 等工具能夠在部署期間做出特定於 Dapr 的決策。AZD 現在可用於部署和配置使用 Dapr 到 Azure 容器應用程式 (ACA) 的 .NET Aspire 應用程式。每個具有 Dapr sidecar 的計畫都將在其相應的 ACA 應用程式中啟用 Dapr,並且其 Dapr 設定將反映以下 DaprSidecarOptions 內容(如果設定):

  • 應用程式編號

  • 應用程式埠

  • 應用程式協定

  • 啟用Api日誌記錄

  • Http最大請求大小

  • HttpReadBufferSize

  • 日誌級別

  • 如果您的應用程式聲明通用狀態儲存和釋出-訂閱 Dapr 元件參照,azd 還將使用 Redis 外掛程式配置 ACA 環境,並生成和部署 Dapr 元件配置,以便從您的應用程式中使用它。這意味著無需任何顯式配置或配置後備儲存即可部署基本 Dapr 應用程式。

    [!重要] 如果您的應用程式聲明的 Dapr 元件型別超出了通用狀態儲存和釋出-訂閱型別,則仍必須在 ACA 環境中手動配置這些型別。

    社群貢獻

    盡管自我們宣布 .NET Aspire 並釋出儲存庫以來只過去了很短的時間,但我們已經看到了 .NET 社群令人難以置信的參與和貢獻。從上述預覽版 2 中的新元件和 Aspir8 部署工具,到仍在開發中的眾多社群貢獻的元件(請留意預覽版 3...)、詳細問題以及人們在討論中互相幫助,人們正在參與塑造Aspire 將成為什麽。我們謹向所有嘗試過 Aspire 並花額外時間做出貢獻的人致以誠摯的「感謝」。

    下一步是什麽?

    我們計劃每月釋出新的 Aspire 預覽版,並努力在 2024 年第二季度釋出穩定的 8.0 版本。請返回 .NET 部落格了解未來版本的詳細資訊,或參與 GitHub 上的 Aspire 計畫。官方範例可在 dotnet/aspire-samples 儲存庫中找到。

    概括

    再次感謝您對 .NET Aspire 的回復。我們很高興努力使使用 .NET 構建分布式應用程式成為一種很棒的體驗,並且希望您嘗試預覽版 2 並讓我們知道您的想法。

    原文連結

    Announcing .NET Aspire Preview 2

    推薦閱讀:

    點選下方卡片關註DotNet NB

    一起交流學習

    點選上方卡片關註DotNet NB,一起交流學習

    請在公眾號後台

    回復 【路線圖】 獲取.NET 2023開發者路線圖

    回復 【原創內容】 獲取公眾號原創內容

    回復 【峰會視訊】 獲取.NET Conf開發者大會視訊

    回復 【個人簡介】 獲取作者個人簡介

    回復 【年終總結】 獲取作者年終總結

    回復 加群 加入DotNet NB 交流學習群

    長按辨識下方二維碼,或點選閱讀原文。 和我一起,交流學習,分享心得。