← 中文资源

简体中文版本

用信封为事件添加模式版本

把事件包进带版本的信封,保持负载变更兼容,并在读取时 upcast 旧版本,使历史事件仍可重放。

阅读英文原文

给信封做版本,而不是给 topic

事件信封携带安全消费负载所需的元数据:唯一 id、类型、模式版本和时间戳。topic 可以保持稳定,而负载持续演进。消费者按 version 分支,并用 upcaster 生成当前内部形状。

{
  "id": "evt-42",
  "type": "OrderCreated",
  "version": 2,
  "occurredAt": "2026-10-20T10:00:00Z",
  "payload": { "orderId": "o-1", "total": 4200, "currency": "USD" }
}

兼容性是部署顺序

新消费者应在生产者发出新版本前理解旧版本;新生产者不应发出旧消费者无法安全忽略的版本。增量可选字段最简单;必填字段、重命名和类型变更需要过渡期或新事件类型。

测试历史事件

保留真实旧负载语料,通过当前消费者重放。断言业务结果,而不只是反序列化。重放测试能发现用构造负载的单元测试漏掉的 upcaster 错误。

验证版本升级

预期结果:v1 和 v2 事件都能被当前消费者处理,业务结果一致,未知可选字段被忽略。用真实历史语料重放并检查输出;发布新版本前先部署能处理它的消费者。