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

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

相关推荐
阿里云云原生4 小时前
深度解构:当 Append-only 的 SLS 遇上 Update/Delete,是如何实现设计权衡的?
云原生
唐青枫10 小时前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
Java之美12 小时前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
秋播12 小时前
nerdctl推送rancher本地镜像到harbor
云原生
唐青枫1 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
阿里云云原生1 天前
告别冗长链路!Kafka × Table Bucket 实现开放表格式零 ETL 实时入湖
云原生·kafka
Caco_D1 天前
一行代码抓遍全网 20 个热榜!Aneiang.Pa 4.0 发布 — 极简 .NET 爬虫库
爬虫·.net
咕白m6251 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
SelectDB2 天前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
小码编匠2 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net