阅读时间:1 分钟
0 字

Action 执行模型 ​

Action 把本体中的业务意图转换为真实系统操作。权限通过只表示主体可尝试该操作,业务规则、审批和源系统状态仍需独立检查。

Action 类型 ​

类型示例执行模式
同步 Action修改单个标签在短超时内执行并核验
异步 Action批量生成任务入队后返回 executionId,通过状态接口查询
审批 Action提交处罚决定等待审批,通过后重新授权并执行

状态机 ​

mermaid
%%{init: {"flowchart": {"curve": "linear"}}}%%
flowchart LR
    C["Created"] --> V["Validated"] --> Z["Authorized"]
    Z --> P["PendingApproval"] --> E["Executing"] --> S["Succeeded"]
    Z --> E
    P --> R["Rejected"]
    E --> F["Failed"]
    E --> U["ResultUnknown"]
    F --> T["Retrying"] --> E
    F --> G["Compensating"] --> M["ManualReview"]
    U --> Q["Verifying"] --> S
    Q --> M

状态转换通过事务记录并发出事件。任何重试都沿用原 executionId;每次外部尝试拥有独立 attemptId 和同一业务幂等键。

幂等与 Outbox ​

幂等范围至少包含租户、Action 定义和调用方幂等键。首次请求持久化输入摘要、模型版本和状态;重复请求返回同一执行或明确报告输入冲突。

执行意图、状态变更和 Outbox 事件在同一本地事务中提交。事件消费者按事件 ID 去重。Outbox 解决本地状态与消息发布的一致性,不保证外部系统只执行一次。

Saga 与补偿 ​

跨系统操作按 Saga 编排。每一步声明前置条件、执行、核验、可重试错误、补偿动作和人工处置责任。补偿是新的业务动作,不等同于数据库回滚;补偿失败必须进入人工处理并保留原始证据。

可验证回写 ​

优先通过源业务 API 或命令接口回写,避免绕过源业务规则直接更新数据库。成功条件必须由 Action 定义声明,例如获得源端业务流水号、查询到预期状态或收到签名回执。

网络超时且无法判断源端结果时进入 ResultUnknown。系统先用幂等键、源端流水号或业务状态查询核验;未经核验不得标记为成功,也不能盲目重试非幂等操作。

审批 ​

审批记录包含申请人、实际审批人、委托链、输入摘要、模型版本、策略决定、意见、时间和结果。审批通过后,如果关键输入、权限、模型版本或业务状态已经变化,执行前必须重新校验。