[转]什么是工作流,flowable 与 Activiti对比

news2024/11/24 11:02:06

什么是工作流

工作流,是指“业务​过程的部分或整体在​计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。

工作流是复杂版本的状态机

就好比一般的请假流程,小明会先提出请假申请,然后由Leader审批或者Manager进行审批,直至审批通过或者拒接。
如果让我们实现请假单状态的切换,那么用一个字段来标识就可以了。
在这里插入图片描述
然而对于复杂的状态或者状态维度增加且状态流转的条件极为复杂,可能单纯用字段记录状态的实现方式就会不那么理想。
工作流解决的痛点在于,解除业务宏观流程和微观逻辑的耦合,让熟悉宏观业务流程的人去制定整套流转逻辑,而让专业的人只需要关心他们应当关心的流程节点,就好比大家要一起修建一座超级体育场,路人甲只需要关心他身边的这一堆砖是怎么堆砌而非整座建筑。

Java工作流开源框架

在这里插入图片描述

工作流对比

Activiti

Activiti 是一个针对业务人员、开发人员和系统管理员的轻量级工作流和业务流程管理 (BPM) 平台。 它的核心是一个用于 Java 的超快速和坚如磐石的 BPMN 2 流程引擎。 它是开源的,并在 Apache 许可下分发。 Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。 它与 Spring 完美集成,非常轻量级,基于简单的概念。

Activiti Cloud 现在是新一代的业务自动化平台,提供一组旨在在分布式基础架构上运行的云原生构建块。

github地址:https://github.com/Activiti/Activiti

主要服务类
在这里插入图片描述
调用方式:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RuntimeService runtimeService = processEngine.getRuntimeService(); 

RepositoryService repositoryService = processEngine.getRepositoryService();

TaskService taskService = processEngine.getTaskService(); 

ManagementService managementService = processEngine.getManagementService();

IdentityService identityService = processEngine.getIdentityService(); 

HistoryService historyService = processEngine.getHistoryService();

FormService formService = processEngine.getFormService(); 

DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

设计器

activiti6 官方提供有Web设计器(Modeler设计器)。部署运行activiti-modeler模块即可使用.
activiti7 推荐使用http://bpmn.io提供的bpmn-js设计器,在线使用地址:https://demo.bpmn.io/new
在这里插入图片描述

Flowable

Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据

github地址:https://github.com/flowable/flowable-engine
主要服务类:flowable服务类和activiti类似,没有太大的变化
设计器:eclipse插件,支持5.x版本,不支持6.x版本中新增加的节点和属性,online web设计器基于AngularJs1.x版本开发, 如下:
在这里插入图片描述

兼容性

● Alfresco Activiti5
● Flowable5

Camunda

Camunda 是一个基于 Java 的框架,支持用于工作流和流程自动化的 BPMN、用于案例管理的 CMMN 和用于业务决策管理的 DMN。
github地址:https://github.com/camunda/camunda-bpm-platform
工作原理:
在这里插入图片描述

设计器

在这里插入图片描述

兼容性:

● Active BPEL
● Alfresco Activiti
● Appian BPM
● Bonitasoft
● JBoss jBPM
● IBM WPS / IBM BPM / IBM MQ Workflow / IBM Lotus Notes
● Oracle BPM
● Software AG Webmethods
● Pega BPM

小结:

Flowable的核心思想更像是在做一个多彩的工具,它在工作流的基础功能上,提供了很多其他的扩展,使用者可以随心所欲地把Flowable打造成自己想要的样子
Activiti7着重于处理bpmn,它的方向在于云,他的设计会尽量像例如Spring Cloud、Docker、K8S靠拢。
Flowable在功能上比Activiti更加完善,基础轮子也更加全面。所以在开发契合国内特色的工作流系统中,Flowable是更佳的选择。
目前两者陆续都开始了商业化,同时也都支持了分布式和云端部署。
Flowable与Activiti 开发团队都是一个,Activiti先,Flowable后,Flowable底层也是使用的Activiti,进行了一些扩展

社区活跃度

Flowable

在这里插入图片描述

Activiti

在这里插入图片描述

Camunda

在这里插入图片描述
小结:从github活跃度来看, activiti和flowable比较相似,camunda最不活跃(可能是过去国人关注的少,中文文档也欠缺)。

总结

在微服务、云计算、服务编排、LCDP等大环境下,camunda的前景优势会慢慢体现出来,作为下一代的工作流引擎,也会逐渐引起更多人的关注。
Activiti和Flowable作为传统的工作流引擎,其设计思想和理念还是很值得CRUD boy们去学习研究下的。
Activiti和Flowable属于同一个团队开发的,Activiti开发完成以后交接给了另外一个团队维护升级,原团队开始开发Flowable,从代码上看Activiti和Flowable使用没有区别,可能在另外的方面有一些区别,暂时没有进行深入使用、鉴别区分

参考链接:
https://zhuanlan.zhihu.com/p/435249026
https://docs.camunda.org/manual/7.16/
https://github.com/camunda/camunda-bpm-platform

https://www.activiti.org/userguide/
https://activiti.gitbook.io/activiti-7-developers-guide/
https://github.com/Activiti/Activiti

Camunda/Flowable/Activiti技术发展史/盘古BPM框架对比最新版
https://blog.csdn.net/qq_30739519/article/details/105050776?spm=1001.2014.3001.5501

https://documentation.flowable.com/latest/
https://github.com/flowable/flo


---------------------
作者:阿泽java
来源:CSDN
原文:https://blog.csdn.net/weixin_42065235/article/details/125410979
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试题:try和finally中都出现了return语句会发生什么情况

答:会导致提前返回,即执行finally中的return语句,try中的return语句不会被执行。 原因:当try中有return语句时,会延迟返回,即先执行完finally的代码,再执行try的return语句,这样做的…

在windows下抓空包(monitor网卡+wareshark+MNM)

当我们的电脑是通过网线联网时,我们可以通过wareshark来抓取通过网口发送和接收到的包,其中包括单播包、多播包以及广播包等等,只要这个包是通过目标网口的。 但是,如果是无线包呢?我们的无线包其实也是通过无线网卡来…

多目标优化及其MATLAB实现

目录 引言 多目标优化的数学模型 非劣解与Pareto前沿 多目标优化求解方法 MATLAB多目标优化工具 多目标规划中的重要概念 表格总结:常见多目标优化方法及其特点 MATLAB在多目标优化中的应用 结论 引言 多目标优化问题在实际应用中非常常见,因为…

ai学习(2)分词、分词算法、加入注意力机制的Seq2Seq结构模型(编码器、解码器、注意力机制)、日期转换实战代码

文章目录 参考书《多模态大模型:算法、应用与微调》1.分词2.分词算法主流的三种分词算法,BPE分词算法(GPT-2、BART、Llama模型)、WordPiece分词算法(BERT模型)、SentencePiece分词算法(ChatGLM、…

Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍

文章目录 前言一、ls二、pwd三、cd四、touch五、 mkdir六、rmdir七、rm总结 前言 Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍 一、ls 列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息 -a 列出目录下的所有文件,…

蓝鹏测控更换新滑台供应商,实现数据平稳性显著提升

近日,蓝鹏测控技术有限公司宣布了一项重要的供应链优化举措——成功更换了其核心设备——滑台的供应商。这一变革不仅优化了公司的生产流程,还显著提升了产品的数据平稳性,达到了惊人的5%提升,标志着蓝鹏测控在提升产品质量与性能…

代码随想录算法训练营第五十三天 | 110.字符串接龙 ,105.有向图的完全可达性 ,106.岛屿的周长

目录 110.字符串接龙 思路 方法一: 广搜 105.有向图的完全可达性 思路 1.确认递归函数,参数 2.确认终止条件 3.处理目前搜索节点出发的路径 方法一:广搜 106.岛屿的周长 思路 解法一: 解法二: 方法一 …

Python | Leetcode Python题解之第398题随机数索引

题目: 题解: class Solution:def __init__(self, nums: List[int]):self.nums numsdef pick(self, target: int) -> int:ans cnt 0for i, num in enumerate(self.nums):if num target:cnt 1 # 第 cnt 次遇到 targetif randrange(cnt) 0:ans …

15 三数之和

解题思路: \qquad 要找到所有和为0的三元组,使用暴力去解的话时间复杂度为 O ( N 3 ) O(N^3) O(N3),但是这样会超时。若三数之和为0,那么只要知道其中的两个,就可以知道第三个数的值。进而可以想到用map这样的数据结…

Patch 35586779: WLS PATCH SET UPDATE 10.3.6.0.231017

以上补丁请自行去oracle官网下载,需要技术支持的请联系:https://item.taobao.com/item.htm?spm2013.1.w4023-17257245948.4.19611db9bzrKBx&id608692494369

C语言 | Leetcode C语言题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; //第一种动态规划:超时 // class Solution { // public: // int integerReplacement(int n) { // vector<int>dp(n1,0); // dp[1]0; // for(int i2;i<n;i){ // if(i%20){ // …

Ubuntu查看系统用户信息

0 Preface/Foreword 1 查看方式 1.1 查看系统用户 getent passwd getent: Get entries for Name Service Switch Libraries. 该命令会列出系统上所有用户的详细信息&#xff0c;包括用户名、密码、用户ID&#xff08;UID&#xff09;、组ID&#xff08;GID&#xff09;、用户描…

Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究

原文链接&#xff1a;https://tecdat.cn/?p37634 本文聚焦于利用马尔可夫递归神经网络&#xff08;MarkovRNN&#xff09;结合树库展开建模工作。MarkovRNN 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制&#xff0c;旨在高效处理具有复杂潜在信…

轻量级模型解读——GhostNet系列

GhostNet由华为诺亚方舟实验室于2019年11月底提出&#xff0c;投稿于cvpr2020&#xff0c;后面2022年&#xff0c;2024年相继提出更新版本GhostNetv2和GhostNetv3。 它们参数量、复杂度及ImageNet的top1结果对比情况如下&#xff1a; 文章目录 1、GhostNetv11.1 Ghost Module1…

如何阅读李冬梅老师《数据结构》

根据《如何阅读一本书》第五章&#xff1a;主动阅读的基础&#xff1a;阅读者要提出的4个基本问题&#xff1f; 以第2章&#xff0c;线性表为例&#xff1a; &#xff08;1&#xff09;本章主要在谈些什么&#xff1f;例如第二章简介&#xff0c;读完这一章可以自己试着写个简…

基于STM32设计的18650锂电池电量(电压/电流)检测系统——采用电阻分压法、均值滤波及ADC测量—文末工程资料下载

基于STM32设计的锂电池电量&#xff08;电压/电流&#xff09;检测 前言&#xff1a;使用STM32F103C8T6的ADC&#xff0c;和电阻分压法及均值滤波来测量18650锂电池的电压&#xff0c;并在OLED显示屏上显示电池电压值&#xff0c;求出电池电压值即求出电池的电流值和电量值。本…

数据库系统概论笔记(持续更新)

一、概念 1、数据 数据库中存储的基本对象。 2、数据库 定义&#xff1a;长期存储在计算机内、有组织、可共享的大量数据的集合。 3、数据库管理系统 定义&#xff1a;是位于用户与操作系统之间的一层数据管理软件。 主要功能&#xff1a; 1&#xff09; 数据定义功能 …

C++ | Leetcode C++题解之第395题至少有K个重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestSubstring(string s, int k) {int ret 0;int n s.length();for (int t 1; t < 26; t) {int l 0, r 0;vector<int> cnt(26, 0);int tot 0;int less 0;while (r < n) {cnt[s[r] - a];…

QStackedWidget类的使用

本文介绍QStackedWidget类的使用。 StackedWidget控件在Qt应用程序开发过程中用的还是比较多的&#xff0c;配合按钮可以实现多个页面之间相互切换&#xff0c;方便了应用程序的开发&#xff0c;本文简要介绍QStackedWidget类实际使用过程中的常用方法&#xff0c;并给出一个简…

Matlab -- meshgrid和peaks的用法

最近在看到关于三维路径规划方面中&#xff0c;提到使用了样条插值的方法&#xff0c;其中提到了meshgrid和peaks。也查阅了相关资料&#xff0c;现将查阅的资料整理如下。 1 meshgrid函数 该函数是网格采样点的函数。 主要使用的函数为[X,Y]meshgrid(xgv,ygv); meshgrid函数…