【.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)

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

相关推荐
xiangcns1 小时前
PDMS PiplineTool(三十)一堆小优化+一个彩蛋功能
.net·二次开发·pdms
MrSYJ4 小时前
别人再问你路由表是啥,这篇文章摔它脸上
docker·云原生·kubernetes
运维开发王义杰5 小时前
ingress-nginx 退役后怎么选:Istio、Kong、Traefik 与 APISIX
云原生
EatFan7 小时前
MCP 从概念到落地:Java(Spring AI Alibaba)与 .NET 双栈接入实操对比
java·人工智能·后端·spring·.net·java后端·mcp
sbjdhjd8 小时前
云安全 | Docker 容器逃逸复盘(一):从隔离边界到运行时链路,如何确认自己身处容器
网络安全·docker·云原生·容器·kubernetes·云计算·云安全
寻林写彡1 天前
01| 裸机部署 K8S:从零搭建生产可用集群
云原生·kubernetes
念何架构之路1 天前
zap WriteSyncer与Sink体系
云原生·golang
EatFan1 天前
从云原生到AI原生:2026后端架构“三驾马车”(事件驱动、虚拟线程、AI Agent内嵌)演进解析
spring boot·云原生·架构·虚拟线程·ai-native·ai agent·spring ai
wzq11_6661 天前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes
CSharp精选营1 天前
.NET 面试必问的 8 道 GC 题,建议收藏
.net·面试题·gc·c#面试题