SuperAPI AI 工具集

dotnet-aspire

部署与运维

查看项目

更新于 10-16 04:05

技能介绍

用途

.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-name URI
  • 所有遥测数据自动跨服务关联

适用场景

适用于构建可观测、可投入生产的云原生分布式应用,尤其是需要编排多个服务、集成常见基础设施组件(数据库、缓存、消息队列、云服务)并统一采集遥测数据的场景。

限制

资料未提供关于收费、价格、平台支持范围、性能指标或具体使用限制的说明。