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

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

相关推荐
界面开发小八哥1 小时前
界面控件DevExpress Office & PDF File v26.1新版亮点 - 全新的条码生成API
pdf·.net·devexpress·ui开发·文档控件·.net 10
逐光老顽童2 小时前
第 5 章:搞懂 K8s Service:从 ClusterIP 到负载均衡
docker·云原生·容器
SLD_Allen3 小时前
DRA、MIG与GPU共享的云原生AI实践
人工智能·云原生
yunwei373 小时前
eBPF 入门实践教程第五十篇:使用 TCX Link 实现可组合的流量控制
linux·云原生·开源
qq_452396233 小时前
第一篇:《服务网格是什么?为什么云原生需要它?》
云原生
逐光老顽童3 小时前
第 2 章:彻底搞懂 K8s Pod——从 YAML 到调度全流程
分布式·云原生
逐光老顽童3 小时前
第 1 章:Kubernetes 核心概念总览——Pod、Deployment、Service 一次搞懂
分布式·云原生
人间凡尔赛4 小时前
2026 云原生后端架构演进:事件驱动、虚拟线程与 AI Agent 内嵌,三驾马车如何重塑技术栈
后端·云原生·架构
江畔柳前堤13 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
de之梦-御风19 小时前
【工业自动化平台】 工程设计-项目分层目录设计(1)
自动化·.net