用途:本技能提供 Apache Pekko + Scala 3 下实现 CQRS/Event Sourcing 的具体模式集。仅当同时满足三个条件时使用:语言为 Scala(推荐 3.x)、采用 CQRS/ES 架构、以 Apache Pekko(或 Akka)作为 Actor 框架。不满足时应改用 cqrs-tradeoffs、cqrs-to-event-sourcing、cqrs-aggregate-modeling 等语言无关技能。
架构与模块:命令侧走 GraphQL Mutation → ZIO 用例层 → Pekko Typed 聚合 Actor → 纯 Scala 领域模型 → 事件存储(DynamoDB)→ DynamoDB Streams → AWS Lambda 更新读模型(PostgreSQL)→ GraphQL Query。命令侧含 domain、use-case、interface-adapter、contract、event-serializer 模块;查询侧含 DAO(Slick)、GraphQL 与 Flyway 迁移;apps 含 command-api、query-api、read-model-updater。
主要能力与关键模式:领域模型保持纯 Scala、不依赖 Pekko,状态变更方法返回 Either[Error, (NewState, Event)],实现类用 private 隐藏;事件以过去式命名并带 _V1 后缀,含 id、entityId、occurredAt;聚合状态用 enum 表达并按状态分离处理函数;协议中命令继承 sealed trait、每种回复独立类型并用 replyTo: ActorRef[XxxReply];聚合 Actor 使用 PersistenceEffector,只做持久化与生命周期管理,领域逻辑委派给领域模型;用例层用 ZIO for 式协调,不作为业务逻辑所在;事件与快照用 Protocol Buffers 定义、ScalaPB 生成、自定义序列化器转换,快照每 1000 事件保存、保留最新 2 个。
测试与限制:领域模型测试不依赖 Pekko,Actor 测试用 ActorTestKit,序列化测试独立,集成测试用 LocalStack。参考资料指向 Pekko CQRS/ES 指南、示例仓库与 pekko-persistence-effector。收费、价格、平台支持等未提供。