Aspire 集成是一套精选的 NuGet 包,用于促进云原生应用程序与突出服务和平台(如 Redis 和 PostgreSQL)的集成。 每个集成都通过自动预配或标准化配置模式提供基本的云原生功能。
提示
始终努力使用最新版本的 Aspire 集成来利用最新功能、改进和安全更新。
警告
集成在开发环境中执行代码。 请确保在使用前信任第三方集成。 有关详细信息,请参阅 安全软件供应链的最佳做法。
集成职责
大多数 Aspire 集成由两个单独的库组成,每个库都有不同的责任。 一种类型表示 AppHost 项目中的资源,称为 托管集成。 其他类型的集成表示连接到通过托管集成建模的资源的客户端库,它们称为 客户端集成。
托管服务集成
托管集成通过预配资源(如容器或云资源)或指向现有实例(例如本地 SQL Server)来配置应用程序。 这些包为各种服务、平台或功能建模,包括缓存、数据库、日志记录、存储和消息传送系统。
托管集成扩展 IDistributedApplicationBuilder 了接口,使 AppHost 项目能够在其 应用模型中表达资源。 托管集成适用于任何类型的应用程序,而不仅仅是 .NET 应用程序。 它们提供基础结构,并将配置详细信息(例如连接字符串、终结点和凭据)作为环境变量注入到引用它们的任何项目、可执行文件或容器中。
官方 托管集成 NuGet 包 带有 aspire、integration和 hosting标记。 除了官方托管集成之外,社区还创建了作为社区工具包一部分的各种服务和平台的托管集成。
有关创建自定义 托管集成的信息,请参阅 “创建自定义 Aspire 托管集成”。
Client 整合
Client 集成将客户端库连接到 依赖项注入(DI)、定义配置架构,以及添加 运行状况检查、复原,以及 遥测(如果适用)。
Aspire 客户端集成库以Aspire.作为前缀,然后包含它们与之集成的完整包名称,例如Aspire.StackExchange.Redis。
这些包将现有客户端库配置为连接到托管集成。 它们扩展了 IHostApplicationBuilder 接口,允许客户端使用的项目(如 Web 应用或 API)使用连接的资源。 官方 客户端集成的 NuGet 包 已用 aspire、integration和 client标签标识。 除了官方客户端集成之外,社区还创建了客户端集成, 作为社区工具包的一部分,用于各种服务和平台。
重要
Aspire集成需要IHostApplicationBuilder,并且与实现不兼容,后者仅提供对HostingStartup的访问权限。 如果您正在使用 HostingStartup 进行模块化配置,请参阅 HostingStartup 不支持与 Aspire 集成 以获取迁移指导。
有关创建自定义客户端集成的详细信息,请参阅 “创建自定义 Aspire 客户端集成”。
托管与客户端集成之间的关系
托管和客户端集成在一起使用效果最好,但它们并不耦合,可以单独使用。 某些托管集成没有相应的客户端集成。 配置使托管集成可与客户端集成配合使用。
Client 集成是 .NET 特定的 ,提供便捷、合理的方式来配置 .NET 应用程序。 但是,可以在没有客户端集成的情况下使用托管集成,例如针对非.NET应用程序,或者当您更倾向于手动配置连接时。 在这些方案中,托管集成仍提供基础结构,并通过任何应用程序技术都可以使用的环境变量公开连接信息。
请考虑下图,描述托管与客户端集成之间的关系:
AppHost 项目用于托管集成。 配置(特别是环境变量)注入到项目、可执行文件和容器中,从而允许客户端集成连接到托管集成。
集成功能
将客户端集成添加到解决方案中的 Aspire 项目时, 服务默认值 会自动应用于该项目;这意味着引用了服务默认值项目,并 AddServiceDefaults 调用扩展方法。 这些默认值设计为在大多数方案中都能很好地工作,并且可以根据需要进行自定义。 应用以下服务默认值:
可观测性和遥测:自动设置日志记录、跟踪和指标配置:
运行状况检查:开放 HTTP 端点以提供关于应用程序的基本可用性和状态信息。 运行状况检查用于影响容器业务流程协调程序、负载均衡器、API 网关和其他管理服务做出的决策。
复原能力:系统对故障做出反应的能力,但仍保持正常运行。 复原能力超出了阻止故障的范围,包括恢复和重新构造云原生环境回到正常状态。
了解主机集成扩展方法
Aspire托管集成提供以Add或With开头的扩展方法。 这些方法符合以下模式:
-
Add*方法:Add*方法在 AppHost 中创建和注册新资源,并返回一种添加的具体资源类型IResourceBuilder<TResource>,其中TResource是添加的具体资源类型。 可以继续对返回的构建器进行流畅的配置。 例如,调用 AddAzureServiceBus 返回一个IResourceBuilder<AzureServiceBusResource>,然后调用 AddServiceBusQueue 该命名空间生成器返回一个IResourceBuilder<AzureServiceBusQueueResource>。 此模式为父子关系(例如服务总线命名空间及其队列或主题)建模,同时保留一致的 Fluent Builder API。 -
With*方法:使用With*方法配置或增强现有资源。 这些方法通常返回与父级相同的对象类型,使你可以链接其他配置调用。
重要
使用 Add 方法时,请确保将正确的资源对象传递给客户端集成。 传递错误的对象可能会导致错误配置连接或运行时错误。
请考虑以下代码:
var serviceBus = builder.AddAzureServiceBus(name: "serviceBus")
.AddServiceBusTopic(name: "messagetopic");
var apiService = builder.AddProject<Projects.servicebusexp_ApiService>("apiservice")
.WithHttpHealthCheck("/health")
.WithReference(serviceBus);
// The serviceBus is an IResourceBuilder<AzureServiceBusTopicResource> type
你可能期望serviceBus表示Azure Service Bus资源,但实际上,由于在同一行调用了AddServiceBusTopic,serviceBus是一个主题Azure Service Bus资源。 若要避免此结果,请对单独的行进行调用 AddServiceBusTopic :
var serviceBus = builder.AddAzureServiceBus(name: "serviceBus");
var topic = serviceBus.AddServiceBusTopic(name: "messagetopic");
var apiService = builder.AddProject<Projects.servicebusexp_ApiService>("apiservice")
.WithHttpHealthCheck("/health")
.WithReference(serviceBus);
// The serviceBus is an IResourceBuilder<AzureServiceBusResource> type
现在,可以选择传递消耗项目所需的资源。 例如,服务总线资源或主题资源。
这种区别有助于准确对应用程序的基础结构进行建模,并确保客户端集成接收正确的连接信息。
版本控制注意事项
托管和客户端的集成会在每次发布时更新,以匹配依赖资源的最新稳定版本。 使用新的映像版本更新容器映像时,托管集成会更新到这些新版本。 同样,当新的 NuGet 版本可用于依赖客户端库时,相应的客户端集成会更新到新版本。 这可确保应用程序可以使用最新的功能和安全更新。 更新 Aspire 类型(主要、次要、修补程序)不一定指示依赖资源中的更新类型。 例如,如果需要,可以在Aspire补丁版本中更新依赖资源的一个新的主版本。
在依赖资源中发生重大中断性变更时,集成可能会暂时拆分为基于版本的包,以简化跨中断性变更的更新。 有关详细信息,请参阅 此类中断性变更的第一个示例。
正式集成
Aspire 提供了许多集成来帮助构建云原生应用程序。 这些集成旨在与 Aspire AppHost 和客户端库无缝配合工作。 以下部分详细介绍了与云无关、特定于 Azure 的集成,以及与 Amazon Web Services(AWS)和社区工具包的集成。
与云无关的集成
以下部分详细介绍了与云无关 Aspire 的集成,并提供了指向各自文档和 NuGet 包的链接,并简要介绍了每个集成。
关于在 Aspire中使用 Visual Studio 集成的更多信息,请参阅 Visual Studio 工具。
Azure 整合
Azure 集成将应用程序配置为使用 Azure 资源。 这些托管集成在 Aspire.Hosting.Azure.* NuGet 包中可用,而其客户端集成在 Aspire.* NuGet 包中可用:
Amazon Web Services (AWS) 托管集成
| 集成指南和 NuGet 包 | 描述 |
|---|---|
|
-
详细了解:📄 AWS 托管 - 托管:📦Aspire。托管.AWS - Client:N/A |
一个用于建模 AWS 资源的库。 |
有关详细信息,请参阅GitHub:AspireHosting.AWS 库。
Kubernetes 托管集成
| 集成指南和 NuGet 包 | 描述 |
|---|---|
|
-
了解详细信息: 📄Kubernetes 托管 - 托管:📦Aspire。Hosting.Kubernetes - Client:N/A |
用于从您的应用程序模型Kubernetes.NET生成Aspire部署清单的库。 |
社区工具包集成
注意
社区工具包集成由社区驱动,由 Aspire 社区维护。 Aspire 这些集成不受团队的正式支持。
有关详细信息,请参阅 Aspire 社区工具包。