跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

在Linux上设置.NET Aspire

[[academy-video-youtube({"vid": "YV2p0NqKZ-E", "start_time": "0", "title": "Setting Up .NET Aspire on Linux", "creator": "Tim Corey", "length": "18m 53s"})]]

本地运行分布式应用程序一直需要在多个终端窗口中进行操作,记住每个服务绑定的端口,并在前端开始接受请求之前手动验证依赖项的健康状态。 .NET Aspire 将该工作流程整合到一个单一的协调层中,该层管理服务发现、健康检查和遥测。 对于在 Linux 上工作的 C# 开发人员,设置只需简单的几个终端命令和一个 VS Code 扩展。

在他的视频"Setting Up .NET Aspire on Linux"中,Tim Corey 在 Linux 机器上安装了 Aspire,配置了 VS Code 扩展,搭建了一个带有 API 后端的 Blazor 启动应用程序,并通过 Aspire 仪表板演示了结构化日志记录、分布式跟踪和指标。 本集还启动了其 C# on Linux 系列的新阶段:构建 "Tiny Ticket" ,一个小型但可部署的帮助台应用程序,涉及到后续集数将涵盖的数据库设置、部署到 Azure 和跨平台开发。 如果您一直在关注 Linux 系列或想看看 Aspire 如何融入真实的开发工作流,本文章涵盖了 Tim 所演示的每一步。

安装 Aspire CLI

[0:48 - 2:20] Tim 从aspire.dev开始,指出该项目最近由"Aspire.NET"重命名为"Aspire"。重命名反映了工具的扩展范围:虽然 Aspire 仍然基于 .NET 并主要服务于 .NET 开发人员,但现在它也支持 TypeScript 应用程序主机,并且有更多语言集成在路线图上。

安装本身是从 Aspire 文档中复制的一个单行 bash 命令,适用于版本 9.2:

dotnet tool install -g aspirate
dotnet tool install -g aspirate
SHELL

运行安装程序后,重新启动您的终端会话,以便工具在您的 PATH 上注册。 如果不重启,您的 shell 将无法识别新命令。

然后确认安装已正确完成:

aspire --version
aspire --version
SHELL

如果版本号打印出来,CLI 就准备好了。 这两步(安装、验证)就是终端端的整个设置。

配置 VS Code 扩展

[2:23 - 3:30] 安装 CLI 后,下一步是VS Code 扩展。 打开扩展面板,搜索"Aspire",安装由 Microsoft 发布的官方扩展。 该扩展增加了项目脚手架、启动配置支持和与 Aspire 仪表板的集成。

安装后,VS Code 会运行一个验证步骤,以确认 CLI 和扩展已对齐。 Tim 指出,扩展还可以通过命令面板直接搭建一个新项目,但他选择了 CLI 方法。 这一选择是有意的:掌握 CLI 意味着当 GUI 工具出现故障时您永远不会卡住。 当 VS Code 模板选择器在安装后未能显示 Aspire 模板时,CLI 提供了一个即时应对措施。

搭建启动项目

[3:30 - 6:42] Tim 选择在终端中操作,而不是使用 VS Code 的"创建新的 .NET 项目"命令(该命令间歇性地无法发现 Aspire 模板):

aspire new
aspire new
SHELL

交互式提示中出现了几个模板选项。 对于生产应用程序,您通常会选择空的 C# 应用程序主机并从那里构建。 出于学习目的,Tim 选择了启动应用,它生成了一个由最小 API 支持的 Blazor 前端。 启动模板包括气象预报终端、计数器页面和预接入的健康检查,让您能立即探索一些功能。

随后的提示说明了其余的配置:

项目名称:         TinyTicket
输出路径:          TinyTicket
使用开发本地主机:    是
Redis 缓存:          否
测试项目:         否
AI 代理环境:       否

Tim 将每个可选功能关闭,以最小化复杂性。 目标是一个简洁的起点,未来的集数将逐步在此基础上构建。 脚手架完成后,在 VS Code 中打开文件夹并在提示时信任工作区。

了解项目结构

[6:42 - 10:00] 生成的解决方案包含四个项目,它们之间的关系揭示了 Aspire 的工作原理。 App Host 项目是协调层。 其Program.cs大约是十二行代码:

var builder = DistributedApplication.CreateBuilder(args);

var api = builder.AddProject<Projects.TinyTicket_ApiService>("api")
    .WithHttpHealthCheck("/health");

builder.AddProject<Projects.TinyTicket_Web>("frontend")
    .WithExternalHttpEndpoints()
    .WithHttpHealthCheck("/health")
    .WithReference(api)
    .WaitFor(api);

builder.Build().Run();
var builder = DistributedApplication.CreateBuilder(args);

var api = builder.AddProject<Projects.TinyTicket_ApiService>("api")
    .WithHttpHealthCheck("/health");

builder.AddProject<Projects.TinyTicket_Web>("frontend")
    .WithExternalHttpEndpoints()
    .WithHttpHealthCheck("/health")
    .WithReference(api)
    .WaitFor(api);

builder.Build().Run();

注意前端如何声明对 API 的引用,并在启动之前等待其变为健康状态。 这种依赖关系排序、服务发现和健康检查正是 Aspire 在代码级提供的。 除此文件中的内容外,没有隐藏的魔法。

与应用程序主机一起的是 Service Defaults 项目,它包含遥测、结构化日志记录和健康检查注册的扩展方法。 这些是选择性便捷的方法:如果您尚未在您的服务中配置 OpenTelemetry 或健康终端,默认值会为您建立它们。

API Service 项目有一个返回随机生成的天气预报的终端。 Web 项目是一个Blazor应用程序,通过一个仅配置服务名称("api")的HttpClient来调用API。 Aspire 在运行时将该名称解析为正确的 URL,因此 Blazor 应用程序从不硬编码端口号或主机名。

Tim 强调了一个重要的部署细节:Aspire 本身不会被部署到生产中。 编排是一个开发时工具。 在生产中,服务 URL 来源于配置(环境变量、应用程序设置或部署管道),应用程序在没有应用程序主机的情况下独立运行。

运行和探索仪表板

[10:59 - 14:46] 通过 VS Code 的运行和调试面板启动应用程序主机,选择 HTTPS 启动配置文件。在初次还原和构建完成后,在浏览器中打开 Aspire 仪表板 。 第一次连接时,您需要从终端输出中粘贴一个登录令牌。

仪表板无需任何额外配置即可显示四类可观察的数据:

控制台输出将每个服务的 stdout 聚合到一个视图中。 无需在终端标签之间切换,您可以看到所有输出交错显示并按服务筛选。

结构化日志显示保留其结构化属性的日志条目。 Tim 遇到的证书信任警告,例如,在此处出现,并带有有关哪个服务生成该条目以及其严重性级别的完整上下文。

跟踪显示分布式调用链。 当 Blazor 前端请求天气数据时,跟踪显示来自前端的 HTTP GET,请求跳转到 API 服务(该服务在视频中花了 7.35 毫秒),以及总页面渲染时间。Tim 指出,绝对数值比相对比较更重要:如果一次调用通常需要 5 秒,突然变为 10 秒,您就找到了回退,而无需附加分析器。

指标为每个服务提供请求率、错误率和资源消耗的计数器。 仪表板还公开每个服务的环境变量和终端凭据,这对于验证配置值是否正确流入非常有用。

介绍 Tiny Ticket:系列项目

[14:46 - 17:17] Tim 概述了将在该系列剩余部分进行的项目计划。 Tiny Ticket 是一个精简的帮助台应用程序:用户提交支持票据,系统跟踪优先级和状态。 数据模型可能小至一个 SQL 表。 关键不在于构建一个功能丰富的产品,而是创建一个垂直切片,涉及到 Linux 上开发生命周期的每个部分:构建、测试,部署,并连接到外部服务。

启动模板的天气预报和计数器页面将被票据视图替代,但 Aspire 编排、API 到前端模式和服务默认值仍将保留。 未来的集数将添加 Microsoft SQL Server 作为数据库,Tim 回答了一个常见的异议:那些无法在本地运行 SQL Server 的开发者(例如 ARM 处理器用户)有时会选择不同的数据库。 他的回应是开发环境应该复制生产环境。 如果生产数据库是 SQL Server,开发环境需要匹配,即使这意味着将数据库运行在容器中。

结尾:从零到仪表板

[17:17 - 18:20] 在不足二十分钟内,该视频涵盖了 Linux 上的完整 Aspire 设置:CLI 安装、VS Code 扩展、脚手架项目和提供结构化日志记录、分布式跟踪和指标的仪表板,而无需任何自定义配置。 Aspire 的真正价值不是任何单一功能,而是减少摩擦:启动一个过程,监控一个仪表板,并在一个地方查看服务如何交互。

结论

[18:20 - 18:53] 在 Linux 上设置 Aspire 需要 CLI 工具、VS Code 扩展和项目脚手架。 从那里,仪表板为您提供跨每个服务的可观察性,无需编写遥测代码。 应用程序主机文件在十几行中定义您的服务关系图,服务默认值处理您否则会手动配置的管道。

此处引入的 Tiny Ticket 项目将作为即将举行的关于数据库集成、Azure 部署和跨平台工作流的节目基础。 从这个起点开始跟随意味着每个新概念都构建在您已经验证过的基础设施上。

系列导航:本文是 C# on Linux 系列的一部分,构建 Tiny Ticket 应用程序。上篇:SQL Server in Docker on Linux。 下一个: 在Linux上为.NET Aspire添加Swagger UI

示例提示:当VS Code模板选择器在扩展安装后无法发现Aspire模板时,可使用aspire new从终端作为可靠的备用方案,然后在之后重新启动VS Code以同步扩展状态。

观看完整视频在他的 YouTube 频道上,获取更多关于在 Linux 开发中设置 .NET Aspire 的见解。

Hero Worlddot related to 在Linux上设置.NET Aspire
Hero Affiliate related to 在Linux上设置.NET Aspire

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我