【.NET新特性·第4篇】.NET Aspire 入门:云原生开发新姿势

.NET Aspire 是微软推出的云原生开发框架,让构建分布式应用变得简单

版本定位

适用版本:.NET 8+ | Aspire(预览版) 前置知识:.NET 8 基础、依赖注入概念

背景

构建云原生应用通常需要处理很多复杂的问题:

  • 服务发现:如何找到其他服务?

  • 配置管理:如何统一管理配置?

  • 可观测性:如何监控应用状态?

  • 依赖管理:如何启动 Redis、数据库等依赖?

.NET Aspire 就是为了解决这些问题而生的。

什么是 .NET Aspire?

一句话:**.NET Aspire 是一个云原生开发框架,提供服务发现、组件集成、可观测性等功能,让构建分布式应用变得简单。**

核心组件

复制代码
┌─────────────────────────────────────────────┐
│              .NET Aspire App                │
├─────────────────────────────────────────────┤
│  Service Discovery    │  Observability      │
│  ─────────────────    │  ──────────────     │
│  自动发现服务          │  Dashboard         │
│  健康检查              │  日志/指标/追踪     │
├─────────────────────────────────────────────┤
│              Components                     │
│  ──────────────────────────────────────────  │
│  Redis  │  PostgreSQL  │  RabbitMQ  │ ...  │
└─────────────────────────────────────────────┘

Aspire 能做什么

  1. 服务发现:自动发现和连接服务

  2. 组件集成:Redis、PostgreSQL、RabbitMQ 等开箱即用

  3. Dashboard:实时监控应用状态

  4. 本地开发:一键启动所有依赖

  5. 云部署:轻松部署到 Azure、AWS、Kubernetes

快速上手

1. 安装 Aspire 模板

复制代码
dotnet new install Aspire.ProjectTemplates

2. 创建 Aspire 项目

复制代码
# 创建 Aspire 应用宿主
dotnet new aspire-apphost -n MyApp

# 创建 Web API 服务
dotnet new aspire-servicedefaults -n MyApp.Api

# 创建 Web 前端
dotnet new aspire-razor -n MyApp.Web

3. 项目结构

复制代码
MyApp/
├── MyApp.AppHost/           # 应用宿主(入口点)
│   ├── Program.cs
│   └── MyApp.AppHost.csproj
├── MyApp.Api/               # Web API 服务
│   ├── Controllers/
│   ├── Program.cs
│   └── MyApp.Api.csproj
├── MyApp.Web/               # Web 前端
│   ├── Pages/
│   ├── Program.cs
│   └── MyApp.Web.csproj
└── MyApp.ServiceDefaults/   # 服务默认配置
    ├── Extensions.cs
    └── MyApp.ServiceDefaults.csproj

4. 应用宿主配置

复制代码
// MyApp.AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);

// 添加 Redis
var cache = builder.AddRedis("cache");

// 添加 PostgreSQL
var db = builder.AddPostgreSQL("db")
    .AddDatabase("mydb");

// 添加 API 服务
var api = builder.AddProject<Projects.MyApp.Api>("api")
    .WithReference(db);

// 添加 Web 前端
builder.AddProject<Projects.MyApp.Web>("web")
    .WithReference(api);

builder.Build().Run();

5. 服务配置

复制代码
// MyApp.Api/Program.cs
var builder = WebApplication.CreateBuilder(args);

// 添加 Aspire 服务
builder.AddServiceDefaults();

// 添加数据库
builder.AddNpgsqlDbContext<MyDbContext>("db");

// 添加 Redis
builder.AddRedis("cache");

var app = builder.Build();

app.MapControllers();
app.Run();

核心功能详解

1. 服务发现

复制代码
// 自动发现并连接其他服务
builder.Services.AddHttpClient("api", client =>
{
    // Aspire 自动注入服务地址
    client.BaseAddress = new Uri("https+http://api");
});

2. 组件集成

复制代码
// Redis 缓存
builder.AddRedis("cache");

// PostgreSQL 数据库
builder.AddPostgreSQL("db")
    .AddDatabase("mydb");

// RabbitMQ 消息队列
builder.AddRabbitMQ("messaging");

// Azure 服务
builder.AddAzureRedis("cache");
builder.AddAzurePostgreSQL("db");

3. Dashboard

运行 Aspire 应用后,会自动启动一个 Dashboard:

复制代码
┌─────────────────────────────────────────────┐
│  .NET Aspire Dashboard                      │
├─────────────────────────────────────────────┤
│  Resources │ Console │ Logs │ Traces │ Metrics │
├─────────────────────────────────────────────┤
│  api      │ Running │ 127.0.0.1:5000       │
│  web      │ Running │ 127.0.0.1:5001       │
│  cache    │ Running │ 127.0.0.1:6379       │
│  db       │ Running │ 127.0.0.1:5432       │
└─────────────────────────────────────────────┘

4. 可观测性

复制代码
// 自动收集日志、指标、追踪
builder.AddServiceDefaults();

// 自定义指标
var meter = new Meter("MyApp", "1.0");
var counter = meter.CreateCounter<int>("requests.total");

app.MapGet("/", () =>
{
    counter.Add(1);
    return "Hello Aspire!";
});

实战场景

适合 Aspire 的场景

  • 微服务架构:多个服务需要协同工作

  • 本地开发:需要 Redis、数据库等依赖

  • 云原生部署:计划部署到 Kubernetes

  • 可观测性需求:需要监控应用状态

不适合 Aspire 的场景

  • 单体应用:只有一个项目

  • 无依赖应用:不需要 Redis、数据库等

  • 简单项目:不需要复杂的服务发现

迁移建议

从现有项目迁移

复制代码
# 1. 安装 Aspire 模板
dotnet new install Aspire.ProjectTemplates

# 2. 创建 Aspire 应用宿主
dotnet new aspire-apphost -n MyApp.AppHost

# 3. 将现有项目添加到宿主
# 编辑 MyApp.AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);
var api = builder.AddProject<Projects.ExistingApi>("api");

注意事项

  1. 预览版:Aspire 仍在预览,API 可能变化

  2. 学习曲线:需要理解 Aspire 的概念

  3. 依赖管理:需要安装 Docker 等依赖

一句话总结

.NET Aspire 让云原生开发变得简单,它把服务发现、组件集成、可观测性打包在一起,让你专注于业务逻辑。


官方文档


📦 示例代码:.NET 新特性巡礼全系列配套示例代码(含 dotnet 8/9/10)

💬 欢迎点赞、收藏、转发,你的支持是我持续创作的动力!

相关推荐
装不满的克莱因瓶2 小时前
Spring 全家桶与 Spring 6 新特性详解:从 IoC 到云原生时代
java·spring·云原生·jdk·新特性·spring6
步步为营DotNet2 小时前
洞悉.NET 11:ASP.NET Core 10 在构建实时协作 Web 应用的技术实践
前端·asp.net·.net
IT策士2 小时前
第 35 篇 k8s之PVC 与 StorageClass:动态存储供应
云原生·容器·kubernetes
2601_961194022 小时前
27考研刘晓燕资源
linux·sql·ubuntu·华为·pdf·.net
武子康2 小时前
调查研究-156 Vercel 全栈应用 前端零配置极速上线:Serverless + 边缘网络 + CI/CD 全栈实战
前端·网络·ci/cd·ai·云原生·serverless·vecel
牧羊狼的狼2 小时前
基于阿里云落地SpringCloudAlibaba云原生微服务:从部署、CI/CD到性能调优、线上排障全体系实战
阿里云·微服务·云原生
这个DBA有点耶11 小时前
云上运维新挑战:当数据库不再“看得见摸得着”
数据库·sql·程序人生·云原生·运维开发·学习方法·dba
light blue bird18 小时前
支组汇总主子节点工序路径图表
前端·jvm·.net·桌面端·gdi绘图
张忠琳18 小时前
【kubevirt】(virt-launcher Part 6)virt-launcher 设备/网络/存储/外设层
云原生·架构·kubernetes·kubevirt