Turbo开源流程引擎 + LogicFlow环境搭建

Turbogithub.com/didi/turbo)是一个开源的轻量级的流程引擎,和传统的工作流引擎(如Activiti、flowable等)相比,Turbo更加简单易懂,学习成本更低,更加适用于一些小型的项目。如果你的项目需要做流程服务设计、低代码设计以及流程编排、工作流等,Turbo或许是你一个新的选择。

LogicFlowgithub.com/didi/LogicF...)是专注于业务流程图可视化的前端框架,且它和Turbo一样来自于滴滴的一个团队,可以说它们两个渊源颇深。LogicFlow可以为Turbo提供专业的前端框架,帮助我们快速绘制流程图,让我们避免了手写流图的麻烦;虽然在开源内容上, Turbo和LogicFlow的还没有磨合的那么好,但以后绝对会成为一对优秀的CP;

本文主要介绍一下,如何使用Turbo,以及如何使用LogicFlow来绘制流程图;在此之前,可以先从github的介绍中简单认识下Turbo;

目标

搭建Turbo + LogicFlow 环境,了解Turbo运作机制。

难度

环境要求

后端:

  • JDK 8 (JDK17 暂未适配)
  • Git
  • Maven

前端:

  • Node

部署Turbo

1、拉取测试工程代码

因为Turbo是以sdk的形式提供的,所以要想使用Turbo,我们应将其嵌入到对应工程中。在这里可以提前拉取示例工程:github.com/lthaoshao/t...

css 复制代码
git clone --depth=1 --branch main https://github.com/lthaoshao/turbo-example.git

2、项目结构介绍

项目做了一个的

css 复制代码
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── didiglobal
    │   │           └── turbo
    │   │               └── example
    │   │                   ├── TurboExampleApplication.java
    │   │                   ├── common
    │   │                   ├── config
    │   │                   ├── controller
    │   │                   ├── exception
    │   │                   ├── service
    │   │                   ├── util
    │   │                   └── vo
    │   └── resources
    │       ├── application-h2.yml    # 测试时直接运行,省去建库建表操作
    │       ├── application-mysql.yml
    │       ├── application.yml
    │       ├── static
    │       │   └── db
    │       │       ├── turbo-dml.sql
    │       │       ├── turbo-h2-ddl.sql
    │       │       └── turbo-mysql.sql
    │       └── templates

3、配置数据库

  • h2数据库

为了方便流程展示和执行,采用h2内存数据库,可以在不配置的情况下,直接体验;

  • MySQL数据库

如果应用于线上,需要配置对应是MySQL数据库;

  • 其他数据库

当前对于其他数据库暂时未做验证。由于使用了mybatis-plus,理论上可以支持,但是因为存在一些手写SQL(暂未优化),可能存在问题,使用时需要验证;

4、启动项目

bash 复制代码
# git clone --depth=1 --branch main https://github.com/lthaoshao/turbo-example.git
cd turbo-example
sh ./run.sh

部署LogicFlow

由于Logicflow默认的数据格式和Turbo默认的数据格式存在一定差异。所以我们需要使用TurboAdapter来实现将Logicflow的数据格式与Turbo数据格式的相互转换。见:github.com/Logic-Flow/...

启动LogicFlow需要有node环境,如果没有,需要先行安装node环境。另外,前端直接访问turbo-example的接口,所以需要先启动turbo服务。

启动命令

bash 复制代码
# clone 代码
git clone --depth=1 --branch master https://github.com/Logic-Flow/turbo-client.git
cd turbo-client
# 启动前端
npm install
npm run dev
# 查看运行日志
# tail -f target/business.log

访问地址可以在启动后谁出在控制台,如:http://localhost:9095/

绘制流程图

在turbo的代码中,已经预置了两个流程,可以作为参考;使用时可创建新的流程图,尝试绘制;

1、新建流程

2、绘制流程

当前画布只支持了 开始节点、用户任务节点、排他网关节点(条件判断)和结束节点,主要和turbo做了对应。两个节点之间的连线箭头,我们称之为顺序流,用于表示流程的走向。

双击顺序流,可以设置判断条件。当前turbo中支持groovy条件表达式,其中的变量是在执行过程中传递的。

3、保存和发布流程

流程编辑完成后, 可以选择保存和发布,发布后可以用于执行验证;

注意:在turbo-example中使用h2时,新绘制的流程不会被永久存储,在服务重启后会消失。

执行流程

turbo的示例工程中通过接口对外提供了几个API,这些API基本上都是直接依赖于Turbo引擎的。参考:com.didiglobal.turbo.example.controller.FlowRuntimeController

另外,为了能更快速的体验Turbo引擎的执行过程, 示例工程中添加了测试的代码,完成了整个执行。测试地址: http://localhost:8080/test/execute

流程的执行过程主要分为了几个阶段:

  • 创建流程实例(createInstance)
    • 此时引擎会生成一条流程实例,并开始执行流程,当遇到用户任务节点或者结束节点时,会停下来。
    • 遇到用户节点,会挂起任务,等待下一次操作。你可以在此时,完成一些业务逻辑。
  • 提交任务(commitTask)
    • 当"用户"完成一系列操作后,可以提交任务,继续驱动流程进行。这个任务可以是展示页面操作,也可以是系统操作,比较自由。
    • 流程驱动时,如果节点后出现多个分支,则会去寻找唯一的出口。如果在顺序流节点上配置了表达式,那么我们也会计算表达式,根据计算结果来确认是否走这条路径。
    • 同样的,如果再次遇到用户任务节点,则会循环这个操作,直到流程结束;
  • 回滚任务(rollbackTask)
    • 如果用户提交后,想要退回到上一个用户任务节点,则可以操作回滚来完成。回滚操作属于一个逆向操作,在流程中,是非必须的。
  • 流程终止(terminateProcess)
    • 除了以上操作,还有终止操作,这个操作是为了快速终止流程执行。

详细内容见,github.com/didi/turbo

常见问题

1. 是否支持Oracle数据库?

对于MySQL之外的数据库暂时未做验证。由于使用了mybatis-plus,理论上可以支持,但是因为存在一些手写SQL(暂未优化),可能存在问题,使用时需要验证一下,后续也会对这块进行优化。

2. 启动时报循环依赖错误

由于SpringBoot 高版本关闭了循环依赖的默认支持,如果存在循环依赖会拒绝启动 可以添加 spring.main.allow-circular-references=true 来开启支持循环依赖

用户任务节点怎么和业务关联?

在模型的节点属性中,有一个 properties ,其中可以放一些和业务相关的内容,比如和表单、任务id、api关联等等。这些内容会存入模型,在执行时遇到用户节点,会在接口的响应中体现。(ps:当前logicflow-client中,暂时没添加这块的绑定功能)

3. 是否支持SpringBoot 3.x ?

目前官方尚未对SpringBoot3的版本进行适配,相信后期很快会出的。

4. 是否支持JDK17 ?

目前官方尚未对JDK17的版本进行适配,相信后期很快会出的。

5.如何参与turbo的交流?

添加微信号:logic-flow,说明加入turbo用户群即可。

相关推荐
man20171 小时前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
路在脚下@1 小时前
Spring Boot 的核心原理和工作机制
java·spring boot·后端
幸运小圣2 小时前
Vue3 -- 项目配置之stylelint【企业级项目配置保姆级教程3】
开发语言·后端·rust
前端SkyRain3 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
提笔惊蚂蚁3 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
老猿讲编程3 小时前
Rust编写的贪吃蛇小游戏源代码解读
开发语言·后端·rust
黄小耶@3 小时前
python如何使用Rabbitmq
分布式·后端·python·rabbitmq
宅小海4 小时前
Scala-List列表
开发语言·后端·scala
蔚一5 小时前
Javaweb—Ajax与jQuery请求
前端·javascript·后端·ajax·jquery