4 Star 38 Fork 20

DiDi-opensource / turbo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

Turbo 简介

Turbo是一款Java实现的轻量级流程引擎,是公司内多个低代码平台的核心后端服务。

特性

  1. 提供“定义流程,并根据流程定义,执行流程”的核心能力

  2. 轻量级的库表操作

  3. 支持流程回滚操作

核心能力

我们提供了以下核心能力:

  1. 流程定义:保存流程基本信息和流程图模型

  2. 流程部署:校验和部署流程模型,记录流程模型快照。部署后流程可以执行

  3. 流程执行:从开始节点开始执行,到用户节点挂起或结束节点结束

  4. 流程提交:提交指定的用户任务,到下一个用户节点挂起或者结束节点结束

  5. 流程回滚:从当前用户节点开始回滚,回滚至上一个用户节点或者开始节点

  6. 执行轨迹追溯:查看流程实例的执行轨迹,可用于快照

为什么选择Turbo

1. 什么时候使用Turbo

业务支持模块化拆分、有序执行,并且有多变的编排诉求时,可以考虑采用Turbo作为底层引擎,同时可以配合使用 logicflow 进行可视化配置。

案例1:某团购售后流程

用户A在订单列表中选择订单,判断订单状态,如果状态为未发货,则直接跳转至退款申请页,如果状态为待收货则提示不支持售后,跳转至物流信息页,如果状态为已收货,则跳转至售后页填写售后信息并提交。

案例2:请假审批流程

员工A输入请假天数,判断请假天数是否大于等于3天,是的话由间接领导审批,否的话则由直属领导批准。

2. Turbo有什么不同

谈到流程引擎,当前市面上大部分是ActivitiFlowableCamunda等面向OA场景,功能强大且有比较完整的生态的工作流引擎(平台),同时因为OA复杂的场景,库表关联操作非常多,但是对于其它业务场景,引擎运维以及学习成本较高,性能不可避免有一定损失,不适用于C端场景。  

同时还有部分专注于纯内存执行、无状态的流程引擎,比如阿里的Compileflow,这类引擎中断后不可重入,不适用于人机交互场景,适用于执行业务规则。举例:N个人去ktv唱歌,每人唱首歌,ktv消费原价为30元/人,如果总价超过300打九折,小于300按原价付款。

Turbo的定位是兼容BPMN2.0的轻量级流程引擎(而非平台),支持可重入交互,主要负责提供稳定而高效的核心能力:流程定义流程驱动,而节点的具体执行由接入方实现,可以快速搭建面向各种场景的流程编排类系统或产品,接入简单,支持灵活扩展,引擎扩展能力通过插件或组件的形式进行补充,支持按需使用,大大降低了用户的运维以及学习成本。

3. 开源流程引擎对比

Activiti Camunda Compileflow turbo
核心表量 28 22 0 5
特性 中断可重入 ×
支持回滚 × ×
运行模式 独立运行和内嵌 独立运行和内嵌 内嵌 内嵌
兼容性 流程格式 BPMN2.0、XPDL、PDL BPMN2.0、XPDL、PDL BPMN2.0 BPMN2.0
支持脚本 JUEL、groovy python、ruby、groovy、JUEL QlExpress groovy
支持数据库 Oracle、SQL Server、MySQL Oracle、SQL Server、MySQL、postgre MySQL

关键模型

1 流程 (Flow)

定义了起点、终点以及起点到终点需要执行的活动、执行路径、执行策略。

2 流程实例 (FlowInstance)

一个流程可能会被多次执行,比如同一个场景的审批流是一个流程,每次有人提交审批这个流程都会被执行一次。流程每执行一次,对应一个流程实例。

3 流程元素 (FlowElement)

*考虑兼容性问题,流程元素设计参考了BPMN规范。

构成流程中的各种元素通称为流程元素 (FlowElement),包括节点 (FlowNode)和顺序流 (SequenceFlow)。

3.1 节点 (FlowNode)

3.1.1 事件节点 (EventNode)

例如:

  • 开始节点 (StartEvent):标识流程的开始;
  • 结束节点 (EndEvent):标识流程的结束;
3.1.2 活动节点 (ActivityNode)

例如:

  • 任务 (Task):需要处理的节点,例如:
    • 用户任务节点 (UserTask):使用方执行任务的节点,比如需要用户提交信息;
    • 系统任务节点 (ServiceTask):系统内部自行执行任务的节点;
  • 内嵌子流程 (SubProcess):将流程作为另一个流程的节点来处理;
  • 调用子流程 (CallActivity):与内嵌子流程不同的是,调用子流程拥有独立的模型存储,会产生新的流程实例
3.1.3 网关节点 (Gateway)

与SequenceFlow配合使用,用于描述SequenceFlow的执行策略。

例如:

  • 排他网关 (ExclusiveGateway):同一时刻的同一个实例中,根据指定输入,有且只有一条路径(SequenceFlow)被命中;

3.2 顺序流 (SequenceFlow)

记录节点之间的执行顺序,可以配置执行的条件conditions(比如用户点击了“同意”作为输入),conditions只有在与网关节点Gateway配合使用时生效,由Gateway决定conditions的执行策略。

快速开始

1.运行环境

  1. JDK1.8
  2. mysql

2.开发环境

  1. JDK1.8
  2. mysql
  3. maven 3.1+
  4. IntelliJ IDEA

maven

流程引擎核心功能集合

<dependency>
  <groupId>com.didiglobal.turbo</groupId>
  <artifactId>engine</artifactId>
  <version>1.0.0</version>
</dependency>

开发demo,非必须依赖

<dependency>
  <groupId>com.didiglobal.turbo</groupId>
  <artifactId>demo</artifactId>
  <version>1.0.0</version>
</dependency>

3. 配置必要信息

执行建表语句,在属性文件中配置属性信息

# 必要属性
spring.datasource.dynamic.primary=engine
spring.datasource.dynamic.datasource.engine.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.dynamic.datasource.engine.username=username
spring.datasource.dynamic.datasource.engine.password=password
spring.datasource.dynamic.datasource.engine.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.engine.url=jdbc:mysql://127.0.0.1:3306/db_engine

4. 根据demo开始你的Turbo之旅吧

根据上文提到的turbo支持的特性,给出了两个例子,其中整体的流程如下图所示:

其中与业务相关的是流程的定义和流程的执行,跟着下面的两个例子来看流程引擎的使用:

Demo1:团购售后

代码:AfterSaleServiceImpl

Demo2:请假流程

代码:LeaveServiceImpl

注:例子使用两个service是为了封装sop,在实际开发中sop是有前端页面传递进入,并非是必须再次开发。

5. Turbo与LogicFlow交互demo

LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。使用LogicFlow与Turbo接口交互可实现流程图创建,编辑,保存,发布功能,发布完成流程图即可参考第四部分文档,执行流程。

后端代码:FlowController FlowControllerTest

前端代码:https://github.com/Logic-Flow/turbo-client

使用文档:LogicFlowGuide

代码提供基本用法示例,使用方可以根据自己的业务场景参考使用

6. 新的节点类型CallActivity上线啦

千呼万唤的子流程它来了,着眼于内外部需求,我们新增了调用子流程节点,支持了同步单实例调用子流程

使用文档:CallActivityGuide

7. 联系我们

加入微信群

添加微信号:logic-flow 加入turbo用户群

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright (C) 2020 Beijing Didi Infinity Technology and Development Co.,Ltd. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

Turbo is a light-weight flow engine framework, support BPMN2.0. 一款轻量级流程引擎服务框架,可作为底层服务支持各类流程设计、低代码设计、工作流、服务编排等场景 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/didiopensource/turbo.git
git@gitee.com:didiopensource/turbo.git
didiopensource
turbo
turbo
master

搜索帮助