本文主要介绍内容:基于SpringCloud的微服务框架,结合flowable的流程引擎,搭建一个微服务版本的审批流项目。
一、微服务介绍。
微服务架构是一种软件设计模式,它将应用程序分解为多个小型、独立的服务,每个服务负责特定的业务功能,并通过轻量级通信机制(如HTTP /REST或消息队列)进行交互。这种架构的核心理念是去中心化,每个服务可以独立开发、部署和扩展,从而提高系统的可扩展性、灵活性和可靠性。微服务架构是一种将应用程序构建为多个小型、独立服务的方法,每个服务运行在自己的进程中,通过轻量级机制通信。常见框架及特点:
1. Spring Cloud:适用于Java生态,提供配置管理、服务发现、断路器等功能,适合企业级应用。
2. Kubernetes:容器编排平台,支持自动化部署、扩展,适用于大规模微服务集群管理。
3. Dubbo:高性能RPC框架,适合服务治理和分布式调用(如电商场景)。
4. Istio:服务网格框架,提供流量管理、安全策略,适用于复杂服务间通信。
5. gRPC:基于HTTP/2的高性能通信框架,支持多语言,适合跨语言微服务调用。
二、若依微服务。
若依(RuoYi)是国内一款广受欢迎的开源快速开发平台,基于Spring Boot和Vue.js构建,提供了完整的前后端分离架构方案。随着微服务架构的普及,若依也推出了微服务版本(RuoYi-Cloud),本文则是基于若依微服务框架,结合使用flowable流程引擎,来搭建一个微服务版本的流程框架。
三、Flowable流程引擎介绍。
Flowable是一个开源、轻量级、基于BPMN 2.0标准的Java业务流程管理(BPM)和工作流引擎,可用于设计、执行和监控自动化业务流程,其官网(flowable.com/open-source)提供了详细的文档和资源。
3.1、Flowable的核心概念与特性
核心概念:Flowable将业务流程抽象为可执行的模型,主要概念包括:
流程定义:业务流程的静态模板,通常以BPMN 2.0标准的XML文件定义。
流程实例:流程定义的一次具体执行,代表一个正在运行的业务流程。
任务:流程中需要由用户或系统完成的工作单元,例如审批环节。
网关:控制流程的分支与合并,如根据条件选择不同路径的排他网关。
主要特性:Flowable的设计注重实用性与灵活性,其特性包括:
轻量级与可嵌入性:核心引擎小巧,可以轻松集成到各种Java应用(包括Spring Boot项目)中。
高性能:优化的架构能够处理大规模并发流程实例。
与Spring生态集成良好:提供了Spring Boot Starter,简化了配置和集成过程。
支持可视化建模:虽然其自带的Flowable UI在7.0版本后不再推荐用于生产,但支持与任何符合BPMN 2.0标准的可视化设计器(如基于bpmn.js的自定义设计器)配合使用。
全面的历史数据追踪:完整记录流程实例、任务、变量等历史信息,便于审计与分析。
3.2、Flowable的核心功能与使用
核心API服务:Flowable通过一系列服务接口提供核心功能:
RepositoryService:负责流程定义的部署、查询与管理。
RuntimeService:用于启动流程实例、管理运行中的实例及流程变量。
TaskService:操作用户任务,如查询待办、完成任务、分配任务等。
HistoryService:查询已完成流程的历史数据。
ManagementService:提供引擎管理和维护操作。
数据库表结构:Flowable使用关系型数据库存储数据,表结构模块化且命名规则清晰。
ACT_RE_*:存储静态信息,如流程定义(ACT_RE_PROCDEF)和部署记录(ACT_RE_DEPLOYMENT)。
ACT_RU_*:存储运行时数据,如流程实例(ACT_RU_EXECUTION)、当前任务(ACT_RU_TASK)和流程变量(ACT_RU_VARIABLE),流程结束后会清理此类数据以保持高性能。
ACT_HI_*:存储历史数据,如流程实例历史(ACT_HI_PROCINST)、任务执行历史(ACT_HI_TASKINST),用于持久化审计。
其他功能模块表:还包括身份管理(FLW_ID_)、表单引擎(FLW_FO_)等专用表。
3.3、Spring Boot集成步骤:
在Spring Boot项目中快速集成和使用Flowable通常遵循以下步骤:
添加依赖:在pom.xml中引入flowable-spring-boot-starter。
配置数据库:在application.properties中配置数据库连接,Flowable会自动创建所需表结构。
定义BPMN流程:使用设计器创建BPMN 2.0流程图,或直接编写XML文件。
部署流程:通过RepositoryService的createDeployment()方法将BPMN文件部署到引擎。
启动流程实例:通过RuntimeService的startProcessInstanceByKey()方法,传入流程定义Key和业务变量(如审批金额、申请人)来启动一个具体的流程。
任务管理:通过TaskService查询当前用户的待办任务(taskAssignee(userId))并完成任务(complete(taskId))。
3.4、Flowable与其他工作流引擎的比较
作为从Activiti分叉而来的项目,Flowable在Java开源工作流引擎中具有独特定位。
与Activiti比较:Flowable继承了Activiti的基础架构,但在性能上进行了优化,并扩展了对CMMN(案例管理)和DMN(决策模型)标准的支持,功能更为全面。
与Camunda比较:两者都支持BPMN 2.0,Camunda在企业级工具链(如监控、分析)上更为成熟,社区活跃度高;Flowable则在核心引擎的轻量级和可嵌入性上表现突出,且提供了从Activiti或Camunda迁移的工具。
与jBPM比较:jBPM与Drools规则引擎集成更紧密,但学习曲线相对较高;Flowable的表结构设计(ACT_前缀)与Activiti/Camunda更为相似,对于来自这些引擎的开发者更易上手。
四、在微服务的框架中集成flowable
本文以若依微服务的框架为基础,采用前后端分离模式,集成flowable流程引擎。小编已经把flowable工作流集成好了,大家可以直接下载使用即可。
代码下载的地址:
后端代码:https://gitee.com/wlx123/spring-cloud-flowable-server
前端代码:https://gitee.com/wlx123/spring-cloud-flowable-vue3

全部评论