通用流程编排组件, 适用于服务编排、工作流、任务审批场景

B站影视 内地电影 2025-10-21 22:21 1

摘要:一飞开源,介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区,共建开源新生态!

一飞开源,介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区,共建开源新生态!

JDEasyFlow是一款通用流程编排组件, 适用于服务编排、工作流、任务审批等场景。它的特点是简单、灵活、易扩展。开发人员30分钟可入门上手,半天可掌握其原理。

使用Apache-2.0开源协议

支持顺序流转、条件流转、循环流转等。

支持脚本节点、用户节点和消息节点。

脚本节点:节点执行时运行一段代码脚本用户节点:根据用户的操作指令触发节点执行消息节点:接收消息后触发节点执行

支持串行执行、并行执行、串并组合执行等。

支持单次交互一次执行多节点、多次交互一次执行一节点、多次交互一次执行多节点等。

JDEasyFlow支持子流程的场景,可将把复杂的流程节点拆分为子流程,便于业务逻辑抽象。

审批流程场景

JDEasyFlow提供了流程任务审批的能力;常用的审批、撤销、驳回、会签、加签等功能都可支持;内置了简单的动态表单。既支持从页面发起和操作流程任务,也支持API的方式,京东OA审批系统也有对接。

四、功能概述

JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排、工作流、审批流等场景,目前在部门的内部业务系统和科技输出系统中广泛应用,其他部门也有使用。

它的特点是简单、灵活、易扩展,开发人员一般30分钟可入门上手,半天可掌握其原理。它分为一个核心模块和若干扩展模块,模块之间松耦合,开发使用时可按需选择、快速集成、渐进式应用,同时支持JSON内置规范和BPMN规范。它的实现原理也有其特色,后面有介绍。

JDEasyFlow整体的特色为简单

模型简单:核心模型概念就是节点的流转扩展简单:提供了监听器、过滤器功能,方便横向切面;节点支持自定义实现定义简单:只需要通过JSON进行节点流转逻辑配置便可,也支持BPMN格式运行简单:代码调用流程引擎,传入流程ID和业务参数便可使用简单:引入组件包便可使用,比较轻量

理论上JDEasyFlow可满足任何流程场景,它主要可解决三类问题:

流程可编排:将业务流程抽象为软件流程,保证软件是现实的真实反映;不同场景可定义不同流程,且流程易修改功能松耦合:将业务节点抽象为软件流程节点,一方面实现功能的松耦合,另一方面实现节点的可复用流程可视化:所见即所得,方便业务产品人员和软件研发人员基于同一语言的交流,也便于流程监控

在实际软件系统开发过程中,如果有如下诉求,可考虑使用流程编排:

业务流程是有明显的多个节点组成希望流程可灵活变更业务流程级别比程序流程高一层,在编程语言级别难以聚合和治理(如一个流程即需要前台操作,又有外系统参与,又有后台操作,在实现上入口分散)

JDEasyFlow的功能架构如下图,功能模块之间松耦合, 开发时可按需选择、快速集成、渐进式应用最简单的使用方式为只在业务应用端引入jar包使用流程引擎。如果需要流程可视化功能,可集成BPMN规范模块,如果还需要流程实例持久化、流程定义持久化等更丰富功能,则可以集成其他相关模块。

整体系统架构

JDEasyFlow的完整系统架构如下,主要有三个端:业务应用端、流程服务端、流程管理端,三个端可部署在单体应用中,也可分开部署。

软件架构

JDEasyFlow底层为流程引擎/状态机模块(使用时选一便可,建议优先使用流程引擎),此模块提供了基于JSON格式的JDEasyFlow规范进行流程编排的能力。

BPMN模块提供了基于BPMN规范进行流程定义和可视化的能力,流程可视化基于bpmn-js,其本质为提供了将BPMN格式流程定义转换为JDEasyFlow格式的能力。

使用说明

在源码的test目录下有quickstart测试用例,可直接运行或调试以了解使用方式和运行原理。

com.jd.easyfloweasyflow-flow编写流程定义文件 以node001->node002->node003的执行顺序为例:{"id": "quickstart_001", "name": "Quick Start 001","nodes": [{"id": "node001","name": "Node001","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart001Node01Action"},"start": true,"post": {"to": "node002"}},{"id": "node002","name": "Node002","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart002Node01Action"},"post": {"to": "node003"}},{"id": "node003","name": "Node003","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart003Node01Action"}}]}

其中QuickStart001Node01Action等为java节点动作类 3. 编写应用启动时加载流程引擎的代码

FlowEngineImpl flowEngine = new FlowEngineImpl;flowEngine.setFlowPath("classpath:flow/quickstart/quickstart_001.json");flowEngine.init;

Spring环境可直接定义FlowEngineImpl bean.
4. 编写具体流程调用执行的代码

FlowParam param = new FlowParam("quickstart_001");FlowResult result = flowEngine.execute(param);

日志打印结果如下:

[main ] INFO FlowEngineImpl - Start parsing definition files:easyflow-flow/target/test-classes/flow/quickstart/quickstart_001.json[main ] INFO FlowEngineImpl - SART EXECUTE FLOW, flowId:quickstart_001 nodeIds:null[main ] INFO BaseFlowRunner - EXECUTE NODE:node001[main ] INFO QuickStart001Node01Action - Execute Node 001[main ] INFO BaseFlowRunner - NEXT NODES:node002[main ] INFO BaseFlowRunner - EXECUTE NODE:node002[main ] INFO QuickStart002Node01Action - Execute Node 002[main ] INFO BaseFlowRunner - NEXT NODES:node003[main ] INFO BaseFlowRunner - EXECUTE NODE:node003[main ] INFO QuickStart003Node01Action - Execute Node 003[main ] INFO BaseFlowRunner - NEXT NODES:[main ] INFO QuickStartTest - Execute finish, current node is:node003

以上只是简单使用示例,EasyFlow可支持很多的配置项和使用场景,更多使用见wiki文档.

打开easyflow-flow-bpmn/BPMNDesigner.html流程设计器. 点击导入按钮,导入easyflow-flow-bpmn/src/test/resources/flow/quickstart/quickstart_001.bpmn文件,可在设计器中看到和以上JSON定义等价的BPMN流程定义. 使用时只需要将FlowEngineImpl的flowParser设置为BpmnFlowParser.

工作流模块提供了基于流程引擎的持久化和任务审批能力, 需要关系型数据库支持. 源码中的示例工程启动步骤如下:

检出本工程库代码至本地.安装关系型数据库, 如MYSQL(使用时需遵守其许可).建库表, 数据库名为easyflow, 表结构可参考源码中的create_all_table.sql和sample_form_template.sql.sample模块的application-open-all.yml文件中配置数据库连接信息, pom中引入数据库驱动jar包.编译构建代码工程, 启动IntegrationOpenApplication类. 启动成功后访问http://localhost:9888便可看到JDEasyFlow管理界面.

JDEasyFlow具有非常灵活的扩展性,你可以基于目前已开源组件扩展做更多的功能.

来源:一飞开源

相关推荐