技术速递|将 .NET Aspire 添加到您现有的 .NET 应用程序中

news2025/1/11 23:49:43

作者:Jon Galloway
排版:Alan Wang

.NET Aspire 是一个针对 .NET 的新型云就绪堆栈,可帮助开发人员快速轻松地开发分布式应用程序。您可能已经看过一些演示,展示了大型 .NET 解决方案,其中充满了复杂的云依赖项,比如 Redis、Kafka 和 Postgres,也许您会想:这些技术也许有一天会用到,但对于我当前的项目来说,并没有太多的实际用途。

但 .NET Aspire 不仅仅涉及尖端技术和新兴应用程序;它还可以让您当前的应用更加简单。使用 .NET Aspire,您可以简化启动过程、改进监控并提高应用程序的可靠性。此外,您可以使用服务发现来增强您的应用程序,即使您尚未准备好使用更复杂的功能或服务(如 Redis 或容器化部署)。

在这篇文章中,我们将介绍如何轻松地改进现有解决方案 - 只需更轻松地维护和添加您已经在使用的功能。当然,您可以更轻松地集成更复杂的云依赖项和功能,这很好……但即使您从未这样做过,这仍然是一种胜利。

TLDR:在不到 5 分钟的时间内,您可以将 .NET Aspire 添加到您现有的应用程序中并获得仪表板、运行状况检查等…所有这些都无需改变您的应用程序的工作方式、CI/CD 管道或部署过程。

什么是 .NET Aspire?

如果您问五个人,您很可能会得到五个不同的答案。老实说,这有点难以描述,尝试简短地描述可能会变成一些流行语宾果游戏。实际上,这只是解决问题的一种方法:构建分布式应用程序很难。即使只是运行应用程序也需要启动一个或多个服务和前端,并确保它们可以相互通信,这可能会令人沮丧。如果这更容易,那不是很好吗?这就是 .NET Aspire 的目标,成为分布式应用程序的构建块,使它们更易于观察、更具弹性、更可扩展和更易于管理。

让我们来看看许多应用程序是如何随着时间的推移而演变的。很多应用程序都是从单一的整体概念验证开始的。您有一个带有数据库的应用程序。
在这里插入图片描述
假设您的概念验证成功,那么除了数据库之外,几乎每个现代应用程序都会发展到至少包含一个前端和一个后端。
在这里插入图片描述
然后,也许,如果我们的应用程序的使用和功能随着时间的推移不断增长,应用程序将变得真正分布式,依赖于大量的分布式依赖项。
在这里插入图片描述
但重点是!即使在非常简单的概念验证阶段,当然在前端-后端-数据库阶段,我们也可以从 .NET Aspire 中受益!只需几行代码,无需弄乱我们的 CI 或部署,我们就可以真正简化我们的日常开发人员体验。

第 1 步:使用 ServiceDefaults 启用因我们太忙而没有启用的 .NET 功能

多年来,ASP.NET Core 团队一直在开发一些很酷的功能,比如跟踪、运行状况检查和弹性。我已经做了多次关于“一小时 ASP.NET 改造”的会议演讲,我们只需打开并配置多年来一直存在的所有这些酷炫功能即可。但问题是……在阅读文档并练习之后,做这个演讲需要一个小时!如果我只是拨动一下“启用专业模式”开关会怎么样?

这就是 Service Defaults 为您做的事情。您只需打开 Service Defaults,即可获得智能日志记录、运行状况检查、弹性等功能,这些都基于 .NET 团队针对 ASP.NET Core 应用和服务的建议。如果您愿意,您可以轻松编辑 ServiceDefaults 项目中的 Program.cs 文件,但您不必这样做。只需将其打开即可。

添加 ServiceDefaults 项目

让我们看一个简单的前端 - 后端应用程序的示例。我将使用 Jeff Fritz 在 Let’s Learn .NET Aspire 活动系列中提供的新 MyWeatherHub 示例,从 start-with-api 代码开始。

打开解决方案,我们将看到有两个项目:

  • MyWeatherHub – 一个显示实时天气数据的 Web 前端项目
  • API – 一个最小 API 项目,通过一组 HTTP API 端点公开来自美国国家气象局的实时天气数据

让我们将 Service Defaults 添加到这个解决方案中,以便我们可以在前端和后端同时获得运行状况检查、日志记录和其他推荐的功能。

在安装了 C# Dev Kit 的 Visual Studio 2022 或 Visual Studio Code 中,我们需要执行以下操作:

  1. 右键单击解决方案并选择 Add > New Project。

  2. 选择 .NET Aspire Service Defaults 项目模板。

  3. 将项目命名为 ServiceDefaults(如果您有创意,任何名称都可以,但本文中的说明假设您使用 ServiceDefaults)。

  4. 单击 Next > Create。

在 Visual Studio 2022 中的外观如下:
在这里插入图片描述
在 Visual Studio Code 中,它如下所示:
在这里插入图片描述
您还可以使用以下命令从命令行添加服务默认值:

dotnet new aspire-servicedefaults -n ServiceDefaults

以上所有选项都只是将一个新项目放入您的解决方案中,该项目了解大多数 ASP.NET Core 分布式应用程序的最佳设置。但是,您现有的应用程序尚未使用它。接下来我们将连接它。

配置 ServiceDefaults

在 Api 和 MyWeatherHub 项目中添加对 ServiceDefaults 项目的引用:

  1. 右键单击 Api 项目并选择 Add > Reference。

  2. 检查 ServiceDefaults 项目并单击 OK。

  3. 右键单击 MyWeatherHub 项目并选择 Add > Reference。

  4. 检查 ServiceDefaults 项目并单击 OK。

Visual Studio 2022 提示
在 Visual Studio 2022 中,您可以将项目拖放到另一个项目上以添加引用。

  1. 在 Api 和 MyWeatherHub 项目中,更新它们的 Program.cs 文件,在 var builder = WebApplication.CreateBuilder(args); 行后立即添加以下行:
builder.AddServiceDefaults();
  1. 在 Api 和 MyWeatherHub 项目中,更新它们的 Program.cs 文件,在 var app = builder.Build(); 行后立即添加以下行:
app.MapDefaultEndpoints();

运行应用程序

首先,我们将使用多项目启动配置来启动应用程序。这很好,这是我们多年来一直采用的做法,但我不得不承认,我并不喜欢这种方式。请记住,我们将在下一步中简化此操作。我们将分两步进行,以明确服务默认值中发生了什么以及 AppHost 添加了哪些部分。

如果您使用的是 Visual Studio 2022,请右键单击 MyWeatherHub 解决方案并转到属性。选择 Api 和 MyWeatherHub 作为启动项目,然后选择 OK。
在这里插入图片描述
现在单击“Start”以启动并调试两个项目。

如果您使用的是 Visual Studio Code,请使用“运行和调试”面板运行 Api 和 MyWeatherHub 项目。示例项目已包含一个 launch.json 文件,其中包含运行这两个项目所需的配置。

测试 Service Defaults 更改

  1. 通过导航到以下 URL 来测试应用程序:
  • https://localhost:7032/swagger/index.html – API

  • https://localhost:7274/ – MyWeatherHub

  1. 您应该看到 API 的 Swagger UI 和 MyWeatherHub 主页。

  2. 您还可以通过导航到 https://localhost:7032/health 查看 API 的运行状况检查。

  3. 您还可以通过导航至 https://localhost:7274/health 查看 MyWeatherHub 的运行状况检查。

  4. 查看终端中的日志以查看运行状况检查和其他遥测数据(例如 Polly 的弹性):

Polly: Information: Execution attempt. Source: '-standard//Standard-Retry', Operation Key: '', Result: '200', Handled: 'False', Attempt: '0', Execution Time: '13.0649'
  1. 点击 5 个不同的城市,将抛出“随机”错误。您将看到 Polly 重试策略的实际作用。
Polly: Warning: Execution attempt. Source: '-standard//Standard-Retry', Operation Key: '', Result: '500', Handled: 'True', Attempt: '0', Execution Time: '9732.8258'
Polly: Warning: Resilience event occurred. EventName: 'OnRetry', Source: '-standard//Standard-Retry', Operation Key: '', Result: '500'
System.Net.Http.HttpClient.NwsManager.ClientHandler: Information: Sending HTTP request GET http://localhost:5271/forecast/AKZ318

一切正常……每个应用程序的输出都会在单独的控制台窗口中弹出,我们可以在终端中看到运行状况检查和日志。因此,我们打开了所有这些功能真是太好了,但管理所有这些 URL、浏览器选项卡和控制台窗口有点麻烦。您最终会在它们之间按 Alt-Tab 键,这是一种非常脱节的体验。
在这里插入图片描述
Service Defaults 在单个项目级别上运行得很好,但它无法帮助我们管理解决方案中的多个项目。这就是 AppHost 的作用所在。

第 2 步:使用 AppHost 简化启动并添加精美的仪表板

好吧,这很酷!我们在解决方案中添加了一个项目和两行代码,并获得了运行状况检查、日志记录、弹性等等。

但我们可以通过添加 AppHost 来让它变得更好。这种多项目配置功能是可行的,但是当我们向解决方案中添加其他项目时,设置和更新会有点麻烦。一旦我们开始运行,我们就必须浏览一系列具有不同端口的 URL,并分别管理每个项目。例如,如果我们想查看日志或输出,我们必须检查每个项目的控制台窗口。随着我们向解决方案添加更多 API 和服务,情况会变得更糟——需要管理更多的 URL、需要检查更多的控制台窗口等。我们可能在生产中设置了一些花哨的仪表板和监控,但这对我的开发没有帮助。

AppHost 有很多很棒的功能,但我最喜欢的两个是针对上述问题的解决方案:它简化了项目启动,并添加了一个很棒的仪表板来监控和管理我开发环境中的应用程序。了解其作用的最好方法是将其添加到我们的解决方案中。

添加 AppHost 项目

这是我们之前使用 ServiceDefaults 执行的标准“添加项目”步骤,但这次我们将选择“.NET Aspire App Host”作为项目模板。在 Visual Studio 2022 或安装了 C# DevKit 的 Visual Studio Code 中:

  1. 右键单击解决方案并选择 Add > New Project。

  2. 选择 .NET Aspire App Host 项目模板。

  3. 将项目命名为 AppHost(同样,任何名称都可以)。

  4. 单击 Next > Create。

在这里插入图片描述
在这里插入图片描述
从命令行,您可以执行以下操作:

dotnet new aspire-apphost -n AppHost

就像我们添加 Service Defaults, 时一样,我们需要添加项目引用和几行代码来使 AppHost 工作。

添加项目引用

在新的 AppHost 项目中添加对 Api 和 MyWeatherHub 项目的引用:

  1. 右键单击 AppHost 项目并选择 Add > Reference。

  2. 选中 Api 和 MyWeatherHub 项目并单击OK。

注意:如果您记得之前的提示,可以将项目拖放到另一个项目上以添加引用。

添加这些引用时,源生成器会自动生成引用 App Host 中的项目所需的代码。

编排应用程序

在 AppHost 项目中,更新 Program.cs 文件,在 var builder = DistributedApplication.CreateBuilder(args); 行后立即添加以下行:

var api = builder.AddProject<Projects.Api>("api");
var web = builder.AddProject<Projects.MyWeatherHub>("myweatherhub");

用最简单的方式运行应用程序!

之前,我们设置了一个多项目启动配置文件。这仍然有效,但从现在开始,您不必为此烦恼。而是将 AppHost 项目设置为启动项目。它了解所有其他项目,并会自动启动它们。这意味着,如果您在开始时添加 AppHost(或使用 .NET Aspire Starter Application 模板或 .NET Aspire Application 模板),则不再需要设置多项目启动配置文件。更好的是,如果您向解决方案添加更多服务,AppHost 也会自动选择它们。

在 Visual Studio 中,您可以通过右键单击 AppHost,然后单击“设置默认项目”并单击“启动”,将 AppHost 项目设置为 Visual Studio 中的启动项目。

如果您使用的是 Visual Studio Code,请将 launch.json 文件的内容替换为以下内容,然后在运行和调试面板中点击运行。

{
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Run AppHost",
                "type": "dotnet",
                "request": "launch",
                "projectPath": "${workspaceFolder}\\AppHost\\AppHost.csproj"
            }
        ]
    }

嘿,我们有一个仪表板!

还记得我们必须浏览一系列不同的 URL 才能查看我们的应用及其运行状况检查吗?现在,AppHost 将自动启动一个包含我们所有服务及其依赖项的仪表板。它将所有运行状况检查、跟踪、日志和环境变量等信息汇总到一个地方。而且,如果我们向解决方案添加更多服务,它们将自动显示在仪表板中。让我们来看看。
在这里插入图片描述
首先,让我们看一下资源。这是我们解决方案中所有资源的便捷列表。我们可以看到 API 和 MyWeatherHub 项目,并在启动时观察它们的状态。我们还可以点击链接访问它们的端点、日志和跟踪信息。

我们之前添加的 ServiceDefaults 项目会自动为我们的所有项目配置跟踪。我们可以在 Traces 选项卡中看到这一点。这是了解应用程序中的时间和依赖关系的好方法。
在这里插入图片描述
Metrics 选项卡向我们展示了有关应用程序的大量信息,包括 CPU 和内存使用情况以及请求和错误的数量。同样,这些都是由 ServiceDefaults 项目自动为我们设置的,并在 AppHost 仪表板中显示。
在这里插入图片描述
Structured 选项卡展示了我们应用中的所有结构化日志。这是查看应用程序中错误和其他重要信息的好方法。
在这里插入图片描述

总结

重点是,.NET Aspire 不仅适用于新应用程序或大型企业解决方案。它现在也适合您,它可以让您现有的应用程序变得更好。您可以将其添加到现有解决方案中,只需几行代码即可获得很多好处。而且,如果您还没有准备好使用更高级的功能,如服务发现或容器化部署,那也没关系。您仍然可以从 .NET Aspire 为您的应用程序带来的简单性和可靠性中受益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

租房网站

TOC springboot0762租房网站 JAVA简介 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;Java&#xff08;java server pages&…

在家上班,躺着收钱?分享远程工作程序员的真实生活……

这是《开发者说》的第15期&#xff0c;与以往采访的活跃于各行各业的开发者不同&#xff0c;这次我们将目光投向了优秀的远程开发者&#xff0c;本栏目将分享自由远程工作者的经历、见解和故事&#xff0c;希望能给大家带来一些崭新的视角。 这次我们邀请到的是拥有10年开发经…

秃姐学AI系列之:AlexNet + 代码实现

目录 深度学习之前的网络 机器学习 几何学 特征工程 总结 深度卷积神经网络的突破的两个关键因素 数据 ImageNet&#xff08;2010&#xff09; 硬件 90年&#xff1a;数据量和计算能力发展的均匀且都不大的时候——神经网络 00年&#xff1a;内存不错、算力也不错&a…

秃姐学AI系列之:使用块的网络——VGG

目录 VGG VGG块 VGG架构 总结 模型演变进度 代码实现 QA VGG 上文讲的 AlexNet 虽然证明了深层神经网络卓有成效&#xff0c;但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。 与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似&#xff0c…

AI大模型独角兽 MiniMax 基于 Apache Doris 升级日志系统,PB 数据秒级查询响应

作者&#xff1a;MiniMax 基础架构研发工程师 Koyomi、香克斯、Tinker 导读&#xff1a;早期 MiniMax 基于 Grafana Loki 构建了日志系统&#xff0c;在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案&#xff0c;并基于 Apache …

基于Crontab调度,实现Linux下的定时任务执行。

文章目录 引言I 预备知识Crontab的基本组成Crontab的配置文件格式Crontab的配置文件Crontab不可引用环境变量杀死进程命令II Crontab实践案例Crontab工具的使用重启tomcat服务每分钟都打印当前时间到一个文件中30s执行一次III 常见问题并发冗余执行任务&& 和|| 和 ;的区…

ChatGPT 的幻觉有改善吗?

​​​ 在早在 ChatGPT 刚刚问世时&#xff08;几个月前&#xff09;&#xff0c;我就曾写过一篇文章&#xff0c;描述它愿意&#xff08;不&#xff0c;是渴望&#xff09;向用户提供大量虚假信息。这些错误被称为幻觉&#xff0c;这是一个技术术语&#xff0c;强调了 ChatGPT…

安装docker+docker远程连接

docker Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙盒”机制&#xff0c;容器之间不会存在任何接⼝。 docker架构 docker核心概念 1. 镜像&#xff08;images&#xff09;&#xff1a;⼀个⾯向 docker 容器引擎的只读模板&#xff0c;…

89.SAP ABAP数据类型 - 笔记

1.SAP ABAP数据类型 目录 全局类型 标准类型 局部类型 全局类型 数据字典中创建的类型&#xff08;下图中②&#xff09; Data Element 是一个数据的类型&#xff0c;包含了这个元素的寓意属性&#xff0c;它包含了一些非结构化的数据对象的技术属性&#xff08;域&#…

丈夫每次回家打妻子,还在外染上性病,婚后没完整过一个年

丈夫每次回家打妻子&#xff0c;还在外染上性病&#xff0c;婚后没完整过一个年 这是一篇涉离婚纠纷的民事起诉状 &#xff08;范文点评&#xff09; 离 婚 起 诉 状 原告&#xff1a;徐某秀&#xff0c;女&#xff0c;现年48岁&#xff0c;汉族&#xff0c;无业&#xff0c…

记录一次SQL 查询 LEFT JOIN 相关优化

记录一次 LEFT JOIN 相关优化 1 环境说明2 sql 在dm库查询用时30秒2.1 sql 语句2.2 sql 执行计划 3 调优数据库参数3.1 使用hint 调整数据库参数3.2 hint 的执行计划 4 永久修改数据库参数5 参数说明6 达梦数据库学习使用列表 1 环境说明 某项目的公文办公系统在生产环境刚部署…

嵌入式学习----网络通信之TCP协议通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1. 适合于对传输质量要求较高&#xff0c;以及传输大量数据 的通信。…

系统编程-信号

6 信号与管道 1 目录 6 信号与管道 1 信号 信号的概念 信号的使用 信号的发送 通过函数来实现信号的发送 信号改造函数(重点) 给自己发送信号函数 定时闹钟函数 暂停进程的函数 例题&#xff1a; 代码一&#xff1a; 代码二&#xff1a; 代码分析 -- linux系统下…

ArcGIS热点分析 (Getis-Ord Gi*)——基于地级市尺度的七普人口普查数据的热点与冷点分析

先了解什么是热点分析 ? 热点分析 (Getis-Ord Gi*) 是一种用于空间数据分析的技术&#xff0c;主要用于识别地理空间数据中值的聚集模式&#xff0c;可以帮助我们理解哪些区域存在高值或低值的聚集&#xff0c;这些聚集通常被称为“热点”或“冷点”&#xff0c;Gi* 统计量为…

Docker介绍、docker安装以及实现docker的远程管理

1.Docker介绍 1.Docker介绍 Docker 是⼀个开源的应用容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采用“沙盒”机制&#xff0c;容器之间不会存在任何接口。 Docker 通过 Linux Container&#xff08;容器&#xff09;技术将任意类型的应用进行包装&#xff0c;变成一…

PhotoZoom Pro 9:AI加持让图像放大革命性飞跃 PhotoZoom下载

全球领先的数字图片和图形缩放软件——PhotoZoom Pro 9&#xff0c;现已正式发布&#xff01;凭借全新的S-Spline Max AI图像缩放技术&#xff0c;PhotoZoom Pro 9在图像放大质量上达到了前所未有的高度。欢迎各位下载和体验最新的9系列版本。 PhotoZoom Pro 9发布 PhotoZoom9…

远端登录基础配置实验

1.作用 方便远程管理&#xff0c;并且传统的console线只能一个用户访问&#xff0c;而远程管理的协议&#xff0c;可以多用户同时登录。 2.基础远程管理方式 Telnet 协议 telnet协议提供了一种通过终端远程登录到服务器的方式&#xff0c;可以远程对设备进行配置和管…

Prometheus 1:安装(Centos7)

1. 同步时间 因Prometheus对时间精度要求高&#xff0c;所以安装前&#xff0c;需要与NTP同步时间&#xff1a; #设置系统显示时区为 亚洲上海 timedatectl set-timezone Asia/Shanghai#同步当地时间 ntpdate -u cn.pool.ntp.org 2. 同步时间后&#xff0c;从官网下载Prometh…

《Web项目跨域请求后端Api设置Cookie失败问题?》

问题描述&#xff1a; 在web项目中跨域请求api时&#xff0c;api登录成功后需要向域名中设置cookie实现在两个域名下共享&#xff0c;但是登录接口返回成功&#xff0c;响应头中也有set-cookie&#xff0c;实际却无法设置到cookie中… web项目访问时的域名https://b.com/ api所…

解决在IIS下typecho访问网址为localhost的问题

如何在IIS下为typecho开启伪静态 布署好typecho发现访问的地址是这样的 默认的访问地址可以看出是一个php的动态页面&#xff0c;通过配置&#xff0c;可以让地址看起来像是一个静态页面。 开启伪静态需要以下两个步骤&#xff1a; 1、增加IIS Rewrite模块重写规则 2、到typ…