事件与协作
领域事件进入 EventStore 后成为权威历史。本区域的下游协作都发生在追加之后:它们消费已提交事实,但不把自己的副作用变成源聚合事务的一部分,也不能回滚已经追加的事件。
先按目标选择协作机制,再进入对应页面理解实现和失败边界。
选择处理机制
| 需求 | 选择 | 责任边界 |
|---|---|---|
| 通知、审计、缓存失效或外部集成等普通副作用 | Processor | 执行匹配函数;副作用自行保证幂等与恢复 |
| 一个事件需要生成跨聚合后续命令 | Saga | 把事件映射为 0..N 条命令并跨过命令发送边界 |
| 处理函数失败后需要持久记录、调度和重放 | 事件补偿 | 保存失败恢复状态;不表达业务反向动作 |
| 维护查询读模型 | Projection | 只负责读模型,不承载普通集成副作用或跨聚合编排 |
先按业务结果选择机制,不要按注解名称选择。一次流程可以同时经过多个分支,但它们的完成信号相互独立。
典型协作路径
text
命令 -> 聚合 -> 追加领域事件
|-> Processor -> 普通副作用
|-> Saga -> 0..N 条后续命令
`-> 处理失败 -> Compensation- 源事件已经提交;任一下游失败都不等于 EventStore 回滚。
EVENT_HANDLED只表示匹配的 Processor 函数完成。SAGA_HANDLED只表示匹配的 Saga 函数完成且其命令发送已完成;不表示后续命令已经处理。- 需要面向调用方等待这些阶段时,参阅完成语义。