一、项目简介
业务系统在发展的过程中,业务的逻辑越来越复杂,简单的逻辑步骤拆分已经不能快速适应业务的变化,大部分时候都是在主流程上打补丁的方式进行业务支持。
而且大量的业务逻辑被隐藏在实现细节中,无法从全局看到整体的业务流程。所以在此背景下,需要一个业务编排框架帮助我们将代码逻辑以组件化的方式组织起来,达到快速配置和快速了解业务全貌的作用。
smart-flow 是一个轻量、灵活的业务流程编排框架,支持业务流程中常见的条件分支控制、子流程、业务组件异步和降级等功能。
名词简介:
Engine smart-flow管理流水线的对象,也是流程引擎进行调用的入口
Pipeline 由组件构成的线性流水线,流程引擎执行会按照流水线的配置线性执行
Component 业务逻辑的包装层,统一称为组件,smart-flow基于组件层提供各种能力,例如分支选择、降级、异步等
Context 执行上下文,用于存放流程引擎执行过程的中间信息
Condition 流程中用于分支判断和路由的组件
Executable 面向开发者的组件,开发者需要实现该接口,编写业务逻辑
二、开源协议
依照 Apache 2.0 协议开源。
三、功能特性
核心功能:
支持基于Java代码或者XML配置的线性流程编排
支持IF、CHOOSE条件分支
支持组件异步
支持组件降级以及降级回调
支持IF、CHOOSE、PIPELINE嵌套子流程
支持组件回滚
支持组件适配,以复用子流程
生成执行路径树
高级功能:
支持Spring环境XML配置集成
支持实时生成流程引擎结构图
支持多种条件表达式(Groovy、OGNL、JavaScript等)
springboot集成
占位符替换
shell命令指令
自定义方法执行
管理功能:
支持自定义执行数据采集
支持HTTP方式引擎数据上报(包含执行数据)
支持组件动态管理(动态降级、启用组件等功能)
简易管理后台
引擎编辑/管理
页面编排
可视化执行链路
执行统计日志视图
实时视图
5.支持从数据库等存储介质重新加载
注:高级功能与管理功能并不由核心包提供,他们需要引入额外的依赖,可以根据自己的需求按需使用
四、模块依赖
smart-flow-core 核心能力,提供流程编排、执行、管理接口等能力
smart-flow-scripts 脚本语言相关
smart-flow-helper 辅助功能模块,提供例如引擎拓扑、编排有效性检验等能力
smart-flow-manager 管理模块,提供数据上报、引擎重新加载、执行指令等能力
smart-flow-spring 集成spring框架
smart-flow-springboot 集成springboot框架
smart-flow-admin 管理后台
五、快速接入
依赖引入
<groupId>org.smartboot.flow</groupId> <artifactId>smart-flow-core</artifactId> <version>${lastest.version}</version>
实现Executable编写业务逻辑
实现Executable,或者继承AbstractExecutable, 实现execute方法, Executable接口泛型,分别为流程引擎的入参和出参。
public class ExampleExecutable<Integer, String> extends AbstractExecutable<Integer, String> {
@Override public void execute(Integer request, Integer result) { // 执行业务逻辑 }}
编排业务流程
smart-flow支持Builder风格和XML形式的流程引擎编排。
下面以Builder形式进行演示:
// 编排流程执行流水线Pipeline<Integer, Integer> pipeline = Builders.<Integer, Integer>pipeline() .name("您的流程名") .next(new Step1()) // 执行步骤,按照先后顺序编排 .next(new Step2()) .next(new Step3()) .next(new Step4()) .build();
// 组装获取引擎实例FlowEngine<Integer, Integer> engine = Builders.<Integer, Integer>engine() .name("您的引擎名称") // 引擎名称 required .pipeline(pipeline) // 引擎流水线 required .build();
流程引擎执行
流程引擎执行参数和出参可以通过外部传递,您也可以通过业务初始化组件在流程第一步进行初始化。
engine.execute(1); // 指定入参engine.execute(1, 2); // 指定入参以及出参engine.execute((Integer)null); // 不指定入参
结果获取
流程引擎执行后会返回一个context,可以通过getResult获取返回结果。但如果您执行时未传递返回值或者未在流程步骤中设置返回值,则获取为null。
EngineContext<Integer, Integer> context = engine.execute(1);Integer result = context.getResult();
六、代码仓库
本项目仓库地址:
https://gitee.com/smartboot/smart-flow
领取专属 10元无门槛券
私享最新 技术干货