SuperAPI AI 工具集

iii-event-driven-cqrs

通用与其它

查看项目

更新于 10-15 22:17

技能介绍

用途:在 iii 引擎上构建命令/查询分离、事件溯源与扇出架构。写侧命令校验输入并通过 pubsub 发布领域事件;读侧多个投影独立订阅事件,在 state 中构建面向查询的视图;事件以有序日志追加到 state 实现事件溯源;PubSub 负责扇出,使一个事件到达所有投影与下游消费者;HTTP 触发器暴露命令端点(POST)与查询端点(GET)。

主要能力与用法:使用 registerWorker 初始化 worker 并连接 iii;registerFunction 定义命令、投影与查询;通过 trigger state::set、state::get、state::list 维护事件日志与投影状态;用 trigger({ function_id: 'publish', payload }) 发布领域事件;用 registerTrigger({ type: 'subscribe', config: { topic } }) 让投影订阅事件;用 registerTrigger({ type: 'http' }) 暴露命令与查询端点;用 trigger({ ..., action: TriggerAction.Void() }) 做即发即弃通知。常见约定:命令函数用 cmd:: 前缀,投影用 proj::,查询用 query::;多个投影可独立订阅同一主题;每个投影使用独立 state scope;命令先校验再发布;关键事件处理可用 TriggerAction.Enqueue({ queue }) 替代 pubsub 以保证投递;事件 ID 应唯一且单调递增以便排序。

适用场景:需要命令/查询分离、事件溯源与独立投影的系统,例如库存管理示例中命令发布事件、多个投影构建可查询视图。

限制与边界:简单 CRUD 加响应式副作用应改用 iii-reactive-backend;需要可持久化的多步流水线与重试应改用 iii-workflow-orchestration;仅当命令/查询分离、事件溯源与独立投影是核心关注点时才使用本技能;不要将其作为无关任务的通用回退,也不要在更具体的 iii 技能更合适时使用;应用示例前需先确认环境与安全约束。完整可运行示例见 ../references/event-driven-cqrs.js。