用途
该技能面向使用 Akka.Hosting 构建实体 Actor(如用户、订单、发票等)的 .NET 开发者,提供一套可复用的模式,使同一份 Actor 代码既能在无集群的单元测试中运行,也能在生产环境的集群分片下运行。
主要能力
- 执行模式抽象:通过 AkkaExecutionMode 枚举区分 LocalTest(纯本地,无远程、无集群)与 Clustered(完整集群分片)两种模式。
- GenericChildPerEntityParent:一个轻量父 Actor,将消息路由到子实体,模拟集群分片语义而无需集群开销,适合单元测试。
- 消息提取器:实现 Akka.Cluster.Sharding 的 IMessageExtractor 接口,基于强类型 ID 将消息路由到实体 Actor。
- Akka.Hosting 扩展方法:以流式配置方式注册 Actor,并抽象执行模式差异。
- ITimeProvider 可测试性:使用 ActorSystem.Scheduler 而非 DateTime.Now,便于测试控制时间。
- akka-reminders 集成:支持持久化定时任务,提供 PostgreSQL 存储与内存存储两种配置,并可自定义 Reminder 解析器。
- 单例 Actor:对只需一个实例的 Actor 提供注册方式。
- 注册表标记类型:用于引用以父 Actor 形式注册的实体。
- Actor 中的 DI 作用域管理:Actor 生命周期长,需按消息创建作用域以使用 Scoped 服务。
- 集群分片配置:说明 RememberEntities 通常应设为 false 及其原因。
使用方式
通过 Akka.Hosting 的扩展方法(如 WithOrderActor、WithOrderDomainActors)注册 Actor,并根据执行模式选择 GenericChildPerEntityParent 或 ShardRegion。消息提取器实现 IMessageExtractor 以定义实体 ID 与消息路由。定时任务通过 WithLocalReminders 配置存储与设置。Actor 中如需 Scoped 服务,注入 IServiceProvider 并按消息创建作用域。
适用场景
- 构建代表领域对象的实体 Actor。
- 需要 Actor 同时适配单元测试与生产集群分片。
- 使用 akka-reminders 设置定时任务。
- 通过 Akka.Hosting 扩展方法注册 Actor。
- 创建可复用的 Actor 配置模式。
限制
资料未提供该技能的收费、价格、平台支持范围或具体效果等信息。RememberEntities 的默认建议为 false,但具体取值需结合实体类型判断。