V10 中的 9.x 能力
迁移之前,用这一页查清你的服务用到的每项 9.x 能力会怎样。每一行说明这项能力的去向:
- 保留:V10 有它。
- 替代:V10 用另一种方式提供它。说明一栏写明怎样提供;
wow-migrateSkill 会改写用到它的代码。 - 放弃:V10 有意不提供它。说明一栏写明该怎么做。
- 10.x:10.0 里没有,计划在之后的 10.x 版本提供。
命令
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| 命令网关:发送、等待、执行 | 保留 | 基于协程;结果以命令结果的 flow 到达。 |
| Reactor 形态的命令网关 | 放弃 | 在协程里调用网关,或者在 Java 里通过客户端的 CompletableFuture 门面调用。处理函数仍可以返回 Mono 或 Flux。 |
等待阶段 SENT、PROCESSED、SNAPSHOT、PROJECTED、EVENT_HANDLED、SAGA_HANDLED | 替代 | 三个阶段 ACCEPTED、COMMITTED 和 HANDLED(subscription),默认 snapshot。见等待结果。 |
等待链尾部请求头(Command-Wait-Tail-*) | 替代 | 多跳的 Wow-Wait 计划。 |
| 跨上下文等待 | 保留 | 信号直接发往发起节点。 |
| 用服务端推送事件返回结果 | 保留 | 每到达一跳一个事件。 |
| 请求 ID 幂等 | 保留 | 请求 ID 在每个租户和聚合类型下唯一;用于另一种命令类型时被拒绝。 |
| 布隆过滤器幂等检查 | 替代 | 每个缓存的聚合保存它最近的请求(从日志推出);其余由存储回答。 |
命令改写器(CommandBuilderRewriter) | 替代 | 准入时的命令转换器;它不能改变命令的身份。 |
挂在另一个聚合上的命令(@AggregateRoot(commands)) | 替代 | @MountedCommand;不指明聚合的命令用 @Unaddressed。 |
| 命令校验(Jakarta Bean Validation) | 替代 | 在准入时校验,Jakarta 校验是其中一种校验器。 |
@VoidCommand | 放弃 | 发送命令,等待不超过 ACCEPTED。 |
自定义路由(@CommandRoute、@AggregateRoute) | 放弃 | 路由从 Manifest 推出:POST /{context}/{aggregate}/{id}/{command},创建命令不带 {id}。 |
Command-* 请求头 | 替代 | Wow-Wait、Wow-Wait-Timeout、Wow-Request-Id、If-Match、Wow-Scope、Wow-Space。 |
| 请求头别名 | 放弃 | 在你的网关里改写请求头。 |
| 从请求头复制的请求事实 | 保留 | 一份配置的请求头列表,加上已认证的应用、远程地址和 User-Agent。 |
| 命令的操作人 | 保留 | 每次提交都会记录。 |
| 全局和按聚合的 ID 生成、CosId | 保留 | 决定函数也能通过决定作用域使用。 |
| 命令批处理 | 替代 | 分区属主批量提交。 |
额外的命令结果(CommandResultAccessor) | 替代 | 决定函数通过决定作用域返回额外结果;它们不存储,所以重复请求拿不到。 |
跨聚合的唯一键(PrepareKey、@PreparableKey) | 替代 | 通过决定作用域使用预留键,存在日志旁边;数据工具导入 9.x 已确认的键。 |
查找 PrepareKey、它的值、它的存活时间 | 10.x | 计划提供只读的预留查找。存活时间放弃:定时一条释放该键的命令。 |
| 期望版本 | 保留 | If-Match;不匹配时返回 412。 |
| 命令总线:内存、本地优先、Kafka | 替代 | 默认经集群通道分区路由;需要持久摄入时按聚合类型经 Kafka 路由。 |
| Redis 命令总线 | 放弃 | — |
单一命令端点(/wow/command/send) | 替代 | 每条命令一个路由。 |
| 命令过滤器与埋点 | 替代 | 一个观测端口,由 OpenTelemetry 模块实现。 |
| 错误码到 HTTP 状态的映射 | 保留 | 用 @ErrorCode 声明,或按错误码配置。 |
领域异常转换为 ErrorInfo | 替代 | 决定结果返回一个带已声明错误码的拒绝。 |
领域模型
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| 核心注解 | 保留 | 同一个包里一套更小、重新设计的注解。 |
事件修订号与升级器(EventUpgrader) | 替代 | @Revision、@Upgrade 和 @Alias。 |
丢弃的事件(DroppedEvent) | 替代 | 退役事件,列在聚合上。 |
固定租户(@StaticTenantId) | 替代 | 在配置里为聚合类型指定固定租户。 |
固定聚合 ID(@StaticAggregateId) | 放弃 | — |
所有者和空间策略(@AggregateOwner、@Spaced) | 替代 | 按聚合类型声明归属(所有者或租户);作用域来自调用方。见身份、租户与访问。 |
命令字段上的身份注解(@AggregateId 等) | 放弃 | 聚合来自路由或消息;命令体只承载业务数据。 |
从状态推出标签(StateAggregateTagsExtractor) | 替代 | 状态上的 @Tags。 |
| 打标签 | 保留 | 生命周期命令 ApplyTags。 |
| 生命周期命令:删除、恢复、转移所有者或空间 | 保留 | — |
@EntityObject、@ValueObject、@Order | 放弃 | — |
@OnError | 放弃 | 从决定函数返回拒绝;把补偿放进 Saga。 |
| 用 Java 写的领域模型 | 保留 | 编译器读取 Java 源码。面向 Java 的测试 API 计划在 10.x 提供。 |
| 注入命令函数的领域服务 | 保留 | 通过生成的模型工厂绑定一次。 |
错误事件(IgnoreSourcing) | 替代 | 一个拒绝,或者一个什么都不改的演化函数。 |
| 状态类独立的聚合 | 保留 | — |
@AfterCommand、@Blocking、@CreateAggregate、@AllowCreate | 保留 | — |
快照系统字段 eventId、snapshotTime、eventTime | 替代 | firstEventTime、lastEventTime、operator、firstOperator 以及其他快照字段。 |
事件与存储
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| MongoDB 事件存储 | 保留 | 一等的日志后端;另一个是 PostgreSQL。 |
| Redis 事件存储与快照存储 | 放弃 | 数据工具只读取 9.x 的 MongoDB 存储:先在 9.x 中把 Redis 数据迁到 MongoDB。 |
| Elasticsearch 事件存储 | 放弃 | Elasticsearch 接收快照和事件流的副本用于检索,从不保存日志。迁移之前先把 9.x 数据迁到 MongoDB。 |
| MongoDB 与 Elasticsearch 快照存储 | 保留 | 还有 PostgreSQL。 |
| 快照策略(每 n 个版本) | 替代 | 每个版本都写快照,按聚合批量写入。 |
| 为聚合关闭快照 | 保留 | V10 新增。 |
按聚合的存储(storage-routing) | 保留 | 命名的存储,按聚合为日志和快照选择。 |
| 重新生成快照,单个或批量 | 保留 | 一条系统命令;状态修订号提高时自动重建。 |
| 历史状态:按版本、按时间、轨迹 | 保留 | GET …/state?version=、?at= 和 …/state/trace。 |
| 读取一个聚合的事件流 | 保留 | events 查询模型。 |
| 恢复或跳过失败的处理 | 替代 | 停放与失败台账,通过 ops 服务操作。 |
| 定向重放一个版本区间;批量重发状态事件 | 10.x | 在此之前,恢复停放的聚合,或重建整个订阅。 |
| 领域事件总线与状态事件总线 | 替代 | 日志就是总线;其他上下文读取 Kafka 上发布的事件流。见日志就是总线。 |
| 创建集合与索引 | 保留 | 由存储的 DDL 设置管理。 |
处理器与订阅
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| Saga、投影、事件处理器 | 替代 | @Saga、@Projection 和 @Reactor;每个处理函数是一个独立的订阅。 |
@OnStateEvent、@OnMessage | 替代 | @OnEvent,接收状态事件,或其中一种事件类型。 |
| 处理另一个上下文的事件 | 保留 | 通过它发布的事件流。 |
| 把另一个上下文的事件解码成共享的类 | 保留 | 把对方上下文的 api jar 放在类路径上。 |
@Retry:次数、退避、超时 | 替代 | V10 的 @Retry,可按订阅配置,之后是停放聚合的长周期重试。 |
| 可恢复与不可恢复的异常类 | 保留 | 在 @Retry 上声明,另有可插拔的失败分类器。 |
| 订阅从哪里开始 | 保留 | V10 新增:在处理函数上声明或通过配置指定。 |
处理器过滤器、拦截器、@Order | 放弃 | — |
| 跳过无法解码的 Kafka 消息 | 10.x | V10 会停放它们。 |
| 在处理函数里读取其他聚合的状态或查询 | 替代 | 类型化的查询 API,处理函数可以使用。 |
查询
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| 单条、列表、分页、游标、计数和聚合查询 | 保留 | — |
| 过滤表达式、相对时间、元数据过滤、聚合窗口 | 保留 | — |
Condition 协议 | 放弃 | 使用过滤表达式;Skill 会改写条件。 |
Kotlin 查询 DSL 与生成的 <State>Properties | 保留 | — |
查询字段注解(@Sensitive、@QueryAlias、@QueryReference 等) | 保留 | — |
| 在查询和状态读取中脱敏敏感字段 | 保留 | — |
ABAC 查询策略、CoSec 的 abac. 属性 | 保留 | 默认关闭。 |
| 查询策略 SPI 与作用域 | 保留 | — |
| MongoDB 与 Elasticsearch 上的快照查询 | 保留 | 还有 PostgreSQL。 |
| 事件流查询与跨聚合的聚合 | 保留 | 快照、事件和数据集共用一个查询引擎。 |
HTTP 查询路由(snapshot/list 等) | 替代 | POST /{context}/{aggregate}/{model}/query,查询种类写在请求体里。 |
| 流式返回列表 | 保留 | 可从停下处续读的服务端推送事件。 |
| 查询 schema 路由与刷新 | 替代 | 对查询路由发 GET,描述模型能做什么;schema 来自 Manifest。 |
| 数据集:目录、网关、路由 | 保留 | — |
| 数据集注册(dataset-registry) | 替代 | 分析目录,一个平台服务。 |
| ClickHouse 数据集后端 | 保留 | — |
| 查询预算、有上限的计数、游标 | 保留 | 另有每个存储一个查询舱壁。 |
消息、BI 与外部存储
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| Kafka 传输 | 替代 | 发布事件流的 Sink、对其他上下文事件流的订阅、命令主题与回执。 |
| Kafka 主题前缀与主题管理 | 保留 | — |
| 分开的生产者与消费者设置 | 10.x | 在此之前只有一个 wow.kafka.properties。 |
BI 同步脚本(/wow/bi/script) | 替代 | ClickHouse Sink 直接写数仓,并为数据集提供展平的视图。 |
| BI 表中状态的嵌套展开 | 10.x | — |
| 9.x 主题的外部消费者 | 放弃 | 切换时把每个消费者改到 V10 发布的事件流。没有 9.x 格式的 Sink。 |
租户与安全
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| CoSec 集成 | 保留 | — |
| 租户与所有者的路由前缀 | 放弃 | 身份来自调用方;被允许在别处行事的调用方在 Wow-Scope 里指明作用域。 |
| 把 CoSec 主体传播到消息 | 替代 | 操作人和会传播的请求事实,随 Saga 发出的每条命令一起传递。 |
| 跨租户的上下文 | 保留 | — |
契约、OpenAPI 与 HTTP
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
wow-metadata.json 与 /wow/metadata | 替代 | Manifest 与 GET /wow/manifest。见一份契约。 |
| JSON Schema 生成 | 替代 | 在构建期依据 Jackson 自己对类的看法生成 schema。 |
| 注册自定义 Jackson 模块 | 放弃 | Wow 的 JSON 注册一组固定的模块,所以线上形式不依赖宿主。 |
| OpenAPI 文档 | 保留 | 从 Manifest 推出;也有对应的 Gradle 任务。 |
| springdoc 集成 | 保留 | — |
错误体(ErrorInfo) | 替代 | 带错误码的 application/problem+json(RFC 9457)。 |
可观测性
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| OpenTelemetry 追踪 | 保留 | — |
| 指标 | 保留 | — |
| 健康指示器 | 保留 | V10 新增:Actuator 的就绪与存活分组。 |
测试
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| 聚合测试 | 保留 | V10 的测试 DSL,制品 wow-test。 |
fork、givenState、按类型的 expectError | 保留 | — |
| Saga、投影与反应器测试 | 保留 | — |
| Java 测试 API | 10.x | 在此之前测试 DSL 只支持 Kotlin。 |
TestValidator | 放弃 | — |
| TCK 与 Testcontainers 测试夹具 | 保留 | — |
wow-mock | 放弃 | — |
平台服务
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| 补偿服务 | 替代 | 基于各服务失败台账的 ops 服务和控制台。数据工具导入未解决的执行。 |
| 长周期自动重试 | 保留 | — |
| 恢复、跳过、标记为可恢复、应用重试规格 | 保留 | — |
| 修改执行的函数;强制准备 | 放弃 | — |
| 企业微信 webhook | 保留 | 另有通用 webhook。 |
| 通知中的控制台链接与模板 | 10.x | — |
| 控制台里的堆栈信息 | 放弃 | — |
| 控制台里的每日趋势分析 | 10.x | — |
| 控制台里可编辑的看板 | 放弃 | — |
| 视图存储 | 保留 | — |
| 数据集注册与分析服务 | 替代 | 分析目录。 |
扩展模块
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
wow-models | 保留 | — |
wow-cocache | 放弃 | — |
wow-apiclient | 替代 | 类型化的命令与查询客户端:对服务自己的上下文在进程内运行,对其他上下文经 HTTP。见上下文之间。 |
| CosId | 保留 | — |
| Spring 集成与 starter 功能 | 替代 | 一个 Spring Boot 宿主模块,按类路径装配各个后端。 |
配置与运维
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
wow.* 配置 | 替代 | 新的键。未知的 wow.* 键记一条警告;安全设置下的未知键会让服务拒绝启动。 |
| 优雅关闭 | 保留 | — |
| 没有持久存储时快速失败 | 保留 | — |
| Maven 构建 | 放弃 | V10 的编译期绑定需要 Gradle。 |
| TypeScript 客户端生成器 | 保留 | 它读取 Manifest。 |
TypeScript
| 9.x 能力 | V10 中 | 说明 |
|---|---|---|
| 命令客户端与经 SSE 等待 | 保留 | — |
| 快照、事件、数据集与描述客户端 | 保留 | — |
Condition 与本地化的操作符 | 放弃 | — |
| 按所有者路径读取状态 | 放弃 | 身份来自调用方。 |
React 查询 hooks(wow-react) | 保留 | — |
| 视图引擎与视图存储客户端 | 保留 | — |
数据迁移
| 9.x 来源 | V10 中 | 说明 |
|---|---|---|
| MongoDB 事件存储:导入、追尾、比对、快照 | 保留 | 见迁移数据。 |
| Redis 事件存储 | 放弃 | 先在 9.x 中迁到 MongoDB。 |
| Elasticsearch 事件存储 | 放弃 | 先在 9.x 中迁到 MongoDB。 |
PrepareKey 的键 | 保留 | 作为已确认的预留导入。 |
| 未解决的补偿执行 | 保留 | 作为停放的聚合导入。 |