sz-rust-workflow 1.2.0

SZ-Rust 工作流引擎 — 状态机/审批流/插件节点编排,含设计器 API 与可观测层
Documentation

sz-rust-workflow

SZ-Rust 工作流引擎 — 状态机/审批流/插件节点编排,含设计器 API 与可观测层。

功能概述

  • 状态机引擎:YAML/JSON 定义状态与迁移,守卫条件求值,乐观锁并发控制
  • 审批流引擎:会签/或签策略,候选人解析(静态/动态/能力),任务办理(审批/驳回/转办/加签/撤回)
  • 插件节点集成:能力调用与超时,容错策略(fail/skip/retry),敏感字段脱敏,卸载联动
  • 流程实例管理:启动/挂起/恢复/终止/查询/历史轨迹
  • 设计器 API:定义导入/导出/校验,版本管理(生效/弃用)
  • 可观测层:事件总线(broadcast channel),Prometheus 指标,结构化审计日志

核心概念

概念 说明
FlowDefinition 流程定义(节点/状态机/审批流)
FlowInstance 流程实例(运行态)
Task 审批任务(待办)
StateMachineEngine 状态机引擎(事件触发迁移)
ApprovalFlowEngine 审批流引擎(任务办理推进)
PluginNodeExecutor 插件节点执行器(能力调用)
WorkflowEngine 统一门面

快速开始

use sz_rust_workflow::{WorkflowEngine, WorkflowConfig, WorkflowDeps, DefinitionFormat};

#[tokio::main]
async fn main() {
    let engine = WorkflowEngine::new(WorkflowConfig::default(), WorkflowDeps::default_for_test());

    // 导入定义
    let yaml = r#"
flow_key: leave_request
version: "1.0.0"
name: 请假申请
nodes:
  - node_id: start
    node_type: start
    kind: start
    next: end
  - node_id: end
    node_type: end
    kind: end
start_node: start
active: true
"#;
    engine.import_definition(yaml, DefinitionFormat::Yaml).await.unwrap();

    // 启动实例
    let summary = engine
        .start_instance("leave_request", serde_json::json!({}), "user1")
        .await
        .unwrap();

    // 查询实例
    let detail = engine.query_instance(&summary.instance_id).await.unwrap();
    println!("实例状态: {:?}", detail.instance.status);
}

配置项

配置 默认值 范围 说明
max_node_hops 10000 [100, 1000000] 死循环防护
plugin_call_timeout 5s [100ms, 60s] 能力调用超时
plugin_retry_max 3 [0, 10] 重试上限
plugin_retry_backoff 100ms [10ms, 10s] 初始退避
guard_expr_max_length 1024 [64, 8192] 守卫表达式长度
context_max_size_kb 256 [16, 16384] 上下文体积
instance_recovery_batch 500 [10, 10000] 批量恢复

错误码

码 功能 HTTP
WF_001-006 定义加载 400
WF_010-016 状态机 400/404/409
WF_020-026 审批流 400/403/409
WF_030-033 插件节点 400
WF_040-042 实例管理 403/409
WF_050-051 设计器 API 404

扩展点

Trait 用途
GuardEvaluator 自定义守卫条件求值
CandidateResolver 自定义候选人解析
ApprovalStrategy 自定义审批策略
FaultStrategyHandler 自定义容错策略
InstanceRepository 自定义实例持久化
WorkflowEventBus 自定义事件总线

测试

cargo test -p sz-rust-workflow

  • 单元测试:121 个
  • 集成测试:10 个(状态机/审批流/插件/设计器 API)
  • 总计:131 个,全部通过

与插件系统集成

工作流引擎通过 sz-rust-capability::CapabilityRegistry 调用插件能力, 通过 sz-rust-addons-loader::AddonLoader 校验插件可用性。

use std::sync::Arc;
use sz_rust_workflow::deps::WorkflowDepsBuilder;

let deps = WorkflowDepsBuilder::new()
    .capability_registry(Arc::new(capability_registry))
    .definition_repo(definition_repo)
    .instance_repo(instance_repo)
    .task_repo(task_repo)
    .history_repo(history_repo)
    .build()
    .unwrap();