用途
该技能面向需要在 .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 应用
限制
资料未提供该技能的具体收费、价格、平台支持范围或效果数据,暂未提供相关信息。