首页 > 编程语言 >【译】发布 .NET Aspire 预览版 2(二)

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

时间:2024-02-09 16:55:50浏览次数:44  
标签:预览版 builder 应用程序 组件 Dapr Aspire NET Azure

原文 | 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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 ([email protected])

标签:预览版,builder,应用程序,组件,Dapr,Aspire,NET,Azure
From: https://www.cnblogs.com/MingsonZheng/p/18012526

相关文章

  • 2024年世界体育界的第一大丑闻:利昂内尔·梅西 (The biggest scandal in the world of s
    无德球员,梅西亲日辱华,不顾球迷感受,拒绝在中国的比赛中上场,并以所谓的伤病为借口,却在3天后的日本比赛中完全恢复如初,并进行了30分钟的高强度的对抗比赛并射门,可以说梅西的这一行径就是对中国亿万百姓的侮辱,一个不懂得尊重中国人的人比不配得到中国人的尊重。Theunethicalpla......
  • .NET&AI技术分享日活动-202309
    OntheafternoonofSeptember23,2023,Iorganizedtheeighth.NETTechnologySharingDayeventinJinan,ShandongProvince,China.Theeventmainlycoveredfivetechnologicalareas:common.NETtechnologies,low-codeplatforms,front-endframeworks,big......
  • 【译】发布 .NET Aspire 预览版 2(一)
    原文|DamianEdwards翻译|郑子铭自上个月宣布并推出.NETAspire以来,我们收到的反馈非常惊人!通过问题和拉取请求对回购协议的参与一直激励着团队。我们正在深入了解开发人员在分布式云应用程序开发中如何使用(以及希望使用).NETAspire或其他组件。社区已经做出了一些很棒的......
  • 基于.NetCore开发博客项目 StarBlog - (31) 发布和部署
    前言StarBlog第一期规划的功能基本完成了,我想着在春节前应该可以把第一期的系列文章完结掉,那么在差缺补漏阶段就剩下开发项目的最后一个环节——部署了。PS:事实上,还有一个很重要但又经常被略过的测试环节我们没有提到,因为时间关系,第一期规划我没有写单元测试和集成测试,在开......
  • PTES(Penetration Testing Execution Standard ,渗透测试执行标准)
    PTES是一种渗透测试标准,旨在提供一种通用语言描述的渗透测试执行范围和标准,始于2009年初,由一些创始成员围绕渗透测试行业讨论所得,参与者可以查看此列表。 其内容由7个主要部分组成,但该标准实际上并没有提供关于执行实际渗透测试的技术要求,但有一份相关的实践技术指南:http://ww......
  • Asp-Net-Core学习笔记:4.Blazor-Server入门
    本来今天开始是有其他的安排了,也没办法抽出那么多时间来学NetCore,不过我想做事情有始有终吧,除了gRPC还没跑起来之外,Blazor这部分也了解了一点,官网地址:https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor目前来说还不是很完善,真正的离线单页应用还处于预览版阶段。Blazo......
  • Asp-Net-Core学习笔记:5.构建和部署
    从上次开始学习Asp.NetCore以来,一直都是玩一玩,还没有什么机会用来实战,最近单位有个新的小项目,于是我用Asp.NetCore来尝尝新,结果也是非常OK,熟悉之后开发效率感觉和Django基本没差。那么进入正题,本文简单说说Asp.NetCore应用的构建和部署。构建构建是使用build命令,不过一般我......
  • Asp-Net-Core学习笔记:WebApi开发实践
    前言用AspNetCore做Api开发也有一段时间了,正好年底在做总结,做一个WebApi开发实践笔记。暂时想到的一些技术关键词,同时也作为本文的大纲,现在对这套技术体系的了解还不够深入,以后会持续更新这个Api开发实践~身份认证:JwtBearer分页:X.PagedList缓存ResponseCacheRedis:St......
  • Asp-Net-Core学习笔记:3.使用SignalR实时通信框架开发聊天室
    SignalR牛刀小试在MVP杨老师的博客里看到这么个东西,我还以为是NetCore3才推出的新玩意,原来是已经有很多年的历史了,那看来还是比较成熟的一个技术了。简介SignalR是一个.NETCore/.NETFramework的开源实时框架,SignalR的可使用WebSocket,ServerSentEvents和LongPolling......
  • Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念
    前言AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式。参考之前的文章:对于小项目来说尚可,够用,但是存在几个问题:每次更新花费的时间太长了,无论是Framework-Dependent还是S......