Go to my github

【译】发布 .NET Aspire 预览版 2(二)

原文 | 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) =>
{
    const string 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

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com)

posted @ 2024-02-09 16:45  郑子铭  阅读(117)  评论(0编辑  收藏  举报