---
url: /zh/guide/event.md
description: 在普通副作用、跨聚合命令、读模型更新与处理失败恢复之间选择正确的事件协作机制。
---

# 事件与协作

领域事件进入 EventStore 后成为权威历史。本区域的下游协作都发生在追加之后：它们消费已提交事实，但不把自己的副作用变成源聚合事务的一部分，也不能回滚已经追加的事件。

先按目标选择协作机制，再进入对应页面理解实现和失败边界。

```mermaid
flowchart TB
    Need{"事实发生后需要什么？"}
    Need -->|执行普通副作用| Processor["Event Processor"]
    Need -->|生成跨聚合后续命令| Saga["Stateless Saga"]
    Need -->|持久恢复处理失败| Compensation["Event Compensation"]
    Processor --> Done["副作用完成"]
    Saga --> Commands["0..N 条命令"]
    Compensation --> Recovery["调度或人工恢复"]
```

## 选择处理机制

| 需求 | 选择 | 责任边界 |
| --- | --- | --- |
| 通知、审计、缓存失效或外部集成等普通副作用 | [Processor](./processor.md) | 执行匹配函数；副作用自行保证幂等与恢复 |
| 一个事件需要生成跨聚合后续命令 | [Saga](../event/saga.md) | 把事件映射为 0..N 条命令并跨过命令发送边界 |
| 处理函数失败后需要持久记录、调度和重放 | [事件补偿](./compensation.md) | 保存失败恢复状态；不表达业务反向动作 |
| 维护查询读模型 | Projection | 只负责读模型，不承载普通集成副作用或跨聚合编排 |

先按业务结果选择机制，不要按注解名称选择。一次流程可以同时经过多个分支，但它们的完成信号相互独立。

## 典型协作路径

```text
命令 -> 聚合 -> 追加领域事件
                  |-> Processor -> 普通副作用
                  |-> Saga -> 0..N 条后续命令
                  `-> 处理失败 -> Compensation
```

* 源事件已经提交；任一下游失败都不等于 EventStore 回滚。
* `EVENT_HANDLED` 只表示匹配的 Processor 函数完成。
* `SAGA_HANDLED` 只表示匹配的 Saga 函数完成且其命令发送已完成；不表示后续命令已经处理。
* 需要面向调用方等待这些阶段时，参阅[完成语义](../command/completion.md)。

## 阅读顺序

1. 普通应用或集成副作用从[事件处理器](./processor.md)开始。
2. 事件需要驱动其他聚合时阅读 [Saga](../event/saga.md)。
3. 处理失败必须持久恢复时，进入[事件补偿](./compensation.md)。
