.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 能做什么
-
服务发现:自动发现和连接服务
-
组件集成:Redis、PostgreSQL、RabbitMQ 等开箱即用
-
Dashboard:实时监控应用状态
-
本地开发:一键启动所有依赖
-
云部署:轻松部署到 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");
注意事项
-
预览版:Aspire 仍在预览,API 可能变化
-
学习曲线:需要理解 Aspire 的概念
-
依赖管理:需要安装 Docker 等依赖
一句话总结
.NET Aspire 让云原生开发变得简单,它把服务发现、组件集成、可观测性打包在一起,让你专注于业务逻辑。
官方文档
📦 示例代码:.NET 新特性巡礼全系列配套示例代码(含 dotnet 8/9/10)
💬 欢迎点赞、收藏、转发,你的支持是我持续创作的动力!