SuperAPI AI 工具集

akka-net-aspire-configuration

部署与运维

查看项目

更新于 10-15 09:47

技能介绍

用途

该技能面向需要在 .NET Aspire 编排下配置 Akka.NET 的开发者,适用于以下场景:

  • 新建使用 .NET Aspire 编排的 Akka.NET 项目
  • 配置 Akka.Cluster 的集群引导与发现
  • 将 Akka.Persistence 与 SQL Server 集成
  • 设置 Akka.Management 进行集群管理
  • 在本地开发中配置多副本 Actor 系统
  • 通过 Aspire 将 Akka.NET 应用部署到 Kubernetes

核心原则

  • 通过 Microsoft.Extensions.Configuration 配置:使用从 appsettings.json 绑定的强类型设置类
  • 使用 Akka.Hosting 进行依赖注入集成,实现与 ASP.NET Core 的无缝整合
  • 由 Aspire 负责编排:让 Aspire 管理服务依赖、网络和环境配置
  • 健康检查:始终为集群、持久化和就绪状态配置健康检查
  • 关注点分离:将 Actor 定义、配置和 Aspire 编排放在不同层
  • 启动时校验配置:使用 IValidateOptions<T> 和 .ValidateOnStart() 在配置错误时快速失败

项目结构

YourSolution/
├── src/
│   ├── YourApp.Actors/              # Actor 定义与业务逻辑
│   │   ├── YourActor.cs
│   │   └── YourApp.Actors.csproj
│   ├── YourApp/                     # ASP.NET Core Web 应用
│   │   ├── Config/
│   │   │   ├── AkkaConfiguration.cs  # Akka 设置扩展方法
│   │   │   └── AkkaSettings.cs       # 配置模型
│   │   ├── Program.cs
│   │   ├── appsettings.json
│   │   └── YourApp.csproj
│   └── YourApp.AppHost/             # Aspire 编排
│       ├── Program.cs
│       ├── AkkaManagementExtensions.cs
│       └── YourApp.AppHost.csproj

所需 NuGet 包

Actor 项目(YourApp.Actors.csproj):

<ItemGroup>
  <PackageReference Include="Akka.Cluster.Hosting" />
  <PackageReference Include="Akka.Streams" />
</ItemGroup>

Web 应用(YourApp.csproj):

<ItemGroup>
  <PackageReference Include="Akka.Hosting" />
  <PackageReference Include="Akka.Cluster.Hosting" />
  <PackageReference Include="Akka.Persistence.Sql.Hosting" />
  <PackageReference Include="Akka.Management" />
  <PackageReference Include="Akka.Management.Cluster.Bootstrap" />
  <PackageReference Include="Akka.Discovery.KubernetesApi" />
  <PackageReference Include="Akka.Discovery.Azure" />
  <PackageReference Include="Akka.Discovery.Config.Hosting" />
  <PackageReference Include="Petabridge.Cmd.Host" />
  <PackageReference Include="Petabridge.Cmd.Cluster" />
</ItemGroup>

AppHost(YourApp.AppHost.csproj):

<Sdk Name="Aspire.AppHost.Sdk" Version="$(AspireVersion)" />

<ItemGroup>
  <PackageReference Include="Aspire.Hosting.AppHost" />
  <PackageReference Include="Aspire.Hosting.Azure.Storage" />
  <PackageReference Include="Aspire.Hosting.SqlServer" />
</ItemGroup>

配置模型(AkkaSettings.cs)

创建强类型配置类,包含 ActorSystemName、RemoteOptions、ClusterOptions、ShardOptions、AkkaManagementOptions、PetabridgeCmdOptions 和 TlsSettings 等属性。TlsSettings 提供 LoadCertificate 方法,根据证书路径与密码加载 X509 证书。AkkaManagementOptions 包含 Enabled、Hostname、Port、ServiceName、PortName、RequiredContactPointsNr、FilterOnFallbackPort 和 DiscoveryMethod。DiscoveryMethod 枚举支持 Config、Kubernetes、AzureTableStorage、AwsEcsTagBased、AwsEc2TagBased。

Akka 配置扩展方法(AkkaConfiguration.cs)

提供 ConfigureAkka 扩展方法,绑定 AkkaSettings、读取 DefaultConnection 连接字符串,并通过 AddAkka 配置网络、集群就绪检查、Actor 系统存活检查以及 SQL 持久化(使用 SqlServer2022 提供程序、SqlServer 数据库映射、TagTable 标签存储模式等),同时为 journal 和 snapshot 配置健康检查。

ConfigureNetwork 方法根据设置应用 TLS、配置 Remoting;当启用 Akka.Management 时清空种子节点,配置集群、Akka.Management HTTP 端点与集群引导,并按 DiscoveryMethod 配置发现方式(Kubernetes、Azure 表存储或 Config)。Config 发现方式下通过 WithConfigDiscovery 添加服务端点。

ConfigureRemoteOptionsWithTls 在启用 TLS 时加载证书、开启 SSL、设置 SslOptions,并将种子节点协议从 akka.tcp:// 替换为 akka.ssl.tcp://。

Program.cs 集成

在 Web 应用中使用 ConfigureAkka 配置 Akka.NET,并在附加配置回调中通过 AddPetabridgeCmd 注册 Petabridge.Cmd 及 ClusterCommands 命令面板,用于集群管理。

Aspire AppHost 配置(Program.cs)

使用 DistributedApplication.CreateBuilder 构建,读取 YourApp 配置节,添加 SQL Server 参数与数据库,添加项目并设置副本数、引用数据库连接(DefaultConnection),并调用 ConfigureAkkaManagementForApp。YourAppConfiguration 包含 Replicas、UseVolumes、UseAkkaManagement 属性。

Aspire Akka.Management 扩展(AkkaManagementExtensions.cs)

ConfigureAkkaManagementForApp 在启用 Akka.Management 时,添加 Azure 存储模拟器与表存储(akka-discovery),让应用等待并引用该表存储(AkkaManagementAzure),并设置网络端点端口(remote 等)。

相关技能

  • akka-net-management:深入 Akka.Management、集群引导与发现提供程序(Kubernetes、Azure、Config)
  • microsoft-extensions-configuration:IValidateOptions 配置校验模式
  • akka-net-best-practices:面向可测试 Actor 系统的集群/本地模式抽象
  • aspire-integration-testing:使用真实基础设施测试 Aspire 应用

限制

资料未提供该技能的具体收费、价格、平台支持范围或效果数据,暂未提供相关信息。