用途
.NET Aspire 是一个有明确主张、面向云端的开发栈,用于构建可观测、可投入生产的分布式应用。它主要解决多服务应用的编排、服务发现、遥测采集以及常用基础设施组件的集成问题。
主要能力
编排(Orchestration):通过 AppHost 协调多服务应用。在 AppHost 的 Program.cs 中使用 DistributedApplication.CreateBuilder(args) 创建构建器,可添加基础设施资源(如 PostgreSQL、Redis、RabbitMQ)、数据库以及项目服务,并通过 WithReference() 建立服务依赖关系。
组件(Components):提供预配置的 NuGet 包,用于集成常见服务。资料中列出的组件包括:
- PostgreSQL (EF):
Aspire.Npgsql.EntityFrameworkCore.PostgreSQL,方法AddNpgsqlDbContext<T>() - SQL Server (EF):
Aspire.Microsoft.EntityFrameworkCore.SqlServer,方法AddSqlServerDbContext<T>() - Redis Cache:
Aspire.StackExchange.Redis.DistributedCaching,方法AddRedisDistributedCache() - Redis Output Cache:
Aspire.StackExchange.Redis.OutputCaching,方法AddRedisOutputCache() - RabbitMQ:
Aspire.RabbitMQ.Client,方法AddRabbitMQClient() - Azure Service Bus:
Aspire.Azure.Messaging.ServiceBus,方法AddAzureServiceBusClient() - Azure Blob Storage:
Aspire.Azure.Storage.Blobs,方法AddAzureBlobClient() - Cosmos DB:
Aspire.Microsoft.Azure.Cosmos,方法AddAzureCosmosClient()
工具(Tooling):提供仪表板用于查看日志、追踪和指标,以及 CLI 进行管理。
服务默认值(Service Defaults):提供共享配置,用于健康检查、遥测和弹性。在共享项目中通过扩展方法 AddServiceDefaults() 配置 OpenTelemetry、默认健康检查、服务发现,并为 HttpClient 设置标准弹性处理器和服务发现。
使用方式
在 AppHost 中编排服务:
// MyApp.AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);
// Infrastructure resources
var postgres = builder.AddPostgres("postgres").WithDataVolume().WithPgAdmin();
var redis = builder.AddRedis("redis").WithRedisInsight();
var rabbitmq = builder.AddRabbitMQ("messaging").WithManagementPlugin();
// Databases
var appDb = postgres.AddDatabase("appdb");
// Projects (services)
var api = builder.AddProject<Projects.Api>("api")
.WithReference(appDb)
.WithReference(redis)
.WithReference(rabbitmq)
.WithExternalHttpEndpoints();
var web = builder.AddProject<Projects.Web>("web")
.WithReference(api)
.WithReference(redis)
.WithExternalHttpEndpoints();
var worker = builder.AddProject<Projects.Worker>("worker")
.WithReference(rabbitmq)
.WithReference(appDb);
builder.Build().Run();
配置服务默认值:
// ServiceDefaults/Extensions.cs (shared project)
public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder)
{
builder.ConfigureOpenTelemetry();
builder.AddDefaultHealthChecks();
builder.Services.AddServiceDiscovery();
builder.Services.ConfigureHttpClientDefaults(http =>
{
http.AddStandardResilienceHandler();
http.AddServiceDiscovery();
});
return builder;
}
仪表板默认访问地址为 https://localhost:18888,提供所有服务的结构化日志、跨服务边界的分布式追踪、指标(请求速率、延迟、错误率)以及资源状态和健康检查。
部署到 Azure Container Apps:
azd init
azd provision # Creates Azure resources
azd deploy # Deploys all services
# Or use Aspire CLI
aspire publish --publisher azure
关键模式
- 每个服务项目都调用
builder.AddServiceDefaults() - 使用
WithReference()建立服务依赖 - 使用
WithExternalHttpEndpoints()标记可公开访问的服务 - 服务发现使用
https+http://service-nameURI - 所有遥测数据自动跨服务关联
适用场景
适用于构建可观测、可投入生产的云原生分布式应用,尤其是需要编排多个服务、集成常见基础设施组件(数据库、缓存、消息队列、云服务)并统一采集遥测数据的场景。
限制
资料未提供关于收费、价格、平台支持范围、性能指标或具体使用限制的说明。