[开源]轻量、灵活的业务流程编排框架,可实时生成流程引擎结构图

开源系统流程管理
2026-06-28 03:11 1 次浏览 • 0 次下载 0KB
[开源]轻量、灵活的业务流程编排框架,可实时生成流程引擎结构图

一、开源项目简介

smart-flow 是一个轻量、灵活的业务流程编排框架,支持业务流程中常见的条件分支控制、子流程、业务组件异步和降级等功能

二、开源协议

使用Apache-2.0开源协议

三、界面展示

四、功能概述

项目背景

业务系统在发展的过程中,业务的逻辑越来越复杂,简单的逻辑步骤拆分已经不能快速适应业务的变化,大部分时候都是在主流程上打补丁的方式进行业务支持。

而且大量的业务逻辑被隐藏在实现细节中,无法从全局看到整体的业务流程。所以在此背景下,需要一个业务编排框架帮助我们将代码逻辑以组件化的方式组织起来,达到快速配置和快速了解业务全貌的作用。

名词简介

  • Engine smart-flow管理流水线的对象,也是流程引擎进行调用的入口
  • Pipeline 由组件构成的线性流水线,流程引擎执行会按照流水线的配置线性执行
  • Component 业务逻辑的包装层,统一称为组件,smart-flow基于组件层提供各种能力,例如分支选择、降级、异步等
  • Context 执行上下文,用于存放流程引擎执行过程的中间信息
  • Condition 流程中用于分支判断和路由的组件
  • Executable 面向开发者的组件,开发者需要实现该接口,编写业务逻辑

功能特性

核心功能

  • 支持基于Java代码或者XML配置的线性流程编排
  • 支持IF、CHOOSE条件分支
  • 支持组件异步
  • 支持组件降级以及降级回调
  • 支持IF、CHOOSE、PIPELINE嵌套子流程
  • 支持组件回滚
  • 支持组件适配,以复用子流程
  • 生成执行路径树

高级功能

  • 支持Spring环境XML配置集成
  • 支持实时生成流程引擎结构图
  • 支持多种条件表达式(Groovy、OGNL、JavaScript等)
  • springboot集成

管理功能

  • 支持自定义执行数据采集
  • 支持HTTP方式引擎数据上报(包含执行数据)
  • 支持组件动态管理(动态降级、启用组件等功能)
  • 简易管理后台
  • 支持从数据库等存储介质重新加载

五、技术选型

快速接入

依赖引入

lastest.version = 1.0.3

<dependency>
    <groupId>org.smartboot.flow</groupId>
    <artifactId>smart-flow-core</artifactId>
    <version>${lastest.version}</version>
</dependency>

实现Executable

实现Executable,或者继承AbstractExecutable, 实现execute方法

public class ExampleExecutable<Integer, String> extends AbstractExecutable<Integer, String> {

@Override
public void execute(Integer request, String result) {
// 执行业务逻辑
}
}

Executable接口自带泛型,分别为流程引擎的入参和出参。

编排业务流程

smart-flow支持Builder风格的流程引擎编排,例如如下示例:

// 创建名为defaultEngine的流程引擎
EngineBuilder<Integer, String> builder = new EngineBuilder<>("defaultEngine");
// 创建一条流水线,名字叫main process, 包含2个步骤
builder.pipeline(new PipelineBuilder<>("main process")
.next(new ExampleExecutable())
.next(new ExampleExecutable()).build());
// 创建引擎,引擎的名字为defaultEngine
FlowEngine<Integer, String> engine = builder.build();

流程引擎执行

流程引擎执行必须执行参数(参数可以为空),同时对于返回值可以在调用入口指定,也可以在流程引擎内部的组件指定。

FlowEngine<Integer, String> engine = builder.build();
engine.execute(1); // 指定入参
engine.execute(1, ""); // 指定入参以及出参
engine.execute((Integer)null); // 不指定入参

流程引擎执行后会返回一个context,可以通过getResult获取返回结果

EngineContext<Integer, String> context = engine.execute(1);
String result = context.getResult();