工作流框架研究

news2024/10/5 18:29:44

工作流框架研究

  • 主流开源框架介绍
    • OsWorkFlow
    • JBPM
    • Activiti
    • Flowable
    • Camunda
    • Camunda 和Flowable对比
      • 功能上对比
      • 性能上对比
  • 总结

主流开源框架介绍

OsWorkFlow

对于比较简单的流程,OsWorkFlow会是一个比较好的选择,对于复杂的流程就不推荐了,OsWorkFlow是一个轻量化的流程引擎,基于状态机制,数据库表很少,OSWorkFlow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(splits)、合并(joins)等。但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定的难度。而且OsWorkFlow组件已过时。长时间没有版本升级了

JBPM

JBPM由JBoss公司开发,目前最高版本JBPM7,不过从JBPM5开始已经跟之前不是同一个产品了,JBPM5的代码基础不是JBPM4,而是Draools Flow 重新开始,基于Drools Flow技术在国内市场用的很少,所以不建议选择JBPM5以后的版本,JBMP4诞生的比较早,后来JBPM创建者Tom Baeyens 离开JBoss后,加入Alfresco后很快推出了新的基于JBMP4的开源工作流系统Activiti,另外JBPM以hibernate作为数据持久化ORM也已经不是主流技术,现在时间节点选择流程引擎,JBPM不是最佳选择。
在这里插入图片描述

Activiti

Activiti由Alfresco软件开发,目前最高版本Activiti7,Activiti的版本比较复杂,有activiti5,activiti6、activiti7几个主流版本,选型时让人晕头转向,有必要先了解一下activiti的几个版本的发展历史。Activiti5和activit6的核心leader是Tijs Rademakers,由于团队内部分歧,2017年Tijs Rademakers离开团队,创建了后来的Flowable,Activiti6以及Activiti7代码已经交接给了Salaboy团队,Activiti6以及Activiti5的代买官方已经暂停维护了。Salaboy团队目前在开发Activiti7,Activiti7内核使用的还是Activiti6。并没有为引擎注入更多的新的特性,只是在activiti之外的上次封装了一些应用。结论是Activiti谨慎使用。

Flowable

Flowable基于activiti6衍生出来的版本,flowable目前最新版本v6.7.2,开发团队是从activiti分离出来的,修复了一众的activiti6的bug,并在其基础上研发出了DMN支持,BPEL支持等等,相对开源版,其商业办的功能会更强大,以flowwable6.4.1版本为分水岭,大力发展其商业版本产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表番生成器(表单引擎)、历史数据同步至其他数据源、ES等。

Flowanble是一个使用Java编写的轻量级业务流程引擎,使用Apache V2 Licence协议开源。2016年10月,Activiti工作引擎的主要开发者离开Alfresco公司并在Activiti分支基础上开启了Flowable开源项目、基于Activiti v6 bet4a发布第一个Flowable relase版本为6.0.Flowable项目包括BPMN引擎、CMMN引擎、DMN引擎、表单引擎等模块。

Camunda

Camunda基于Activiti5,所以其保留了PVM,最新版本Camunda7.17,保持每年发布2个版的的节奏,开发团队也是从activiti中分离出来的,发展轨迹与Flowable相似,同时也提供商业版本,不过对于一般企业应用,开源版本也就足够了,强烈推荐Camunda流程引擎,功能和性能表现稳定。

Camunda 和Flowable对比

功能上对比

Flowable和Camunda都是工作流程引擎,但在功能上有非常多的相似之处。我们罗列几个比较重要的给大家看看:
在这里插入图片描述

性能上对比

通过压力测试工具Jmeter分别对Flowable和Camunda进行高并发压力测试,并发数从100到1000,Jmeter设置Ramp-up为1,循环次数为1,测试数据如下:

并发数FlowableCamunda性能对比
1002702115450%
200X2103
400X4467
600X4928
800X6571
1000X8780
Camunda 我们还能正常测试,Flowable在并发100的情况下还可以但是在200的时候就直接没有了反应。

总结

因为我们业务对性能要求不高,所以最终选择了Flowable工作流。

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

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

相关文章

小 C 的数学(math)

祝大家劳动节快乐!!小手动起来 言归正传┏ (゜ω゜)☞ 题目描述 小 C 想要成为一名 OIer,于是他提前学习数学,为 OI 做好铺垫。这一天,他的数学老师给了一道题:给定正整数 a,以及给定一个区间 …

Python基础之列表元组

1.列表 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 去锁定它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作…

HTB-Forge

HTB-Forge 信息收集80端口 立足user -> root 信息收集 80端口 试试上传图片看看有什么限制。 jpg上传成功,并且会给一个随机的文件名存储图片,过了一阵子图片就会被清除。 上传phpinfo后访问界面出现报错。 看来没有执行上传的PHP代码&#xff0…

第43天-DP-第九章 ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

文章目录 1. 单词拆分2.多重背包3. 背包总结 1. 单词拆分 s class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());// 1. dp[i] 为true代表 可以拆分为一个或者多…

PySyft框架

openmined社区开源的pysyft框架可以提供安全的联邦学习&#xff0c;有助于解决基于“不可见数据”的统计分析与建模开发。在PySyft中&#xff0c;syft是重要的张量&#xff0c;通过建立SyftTensor抽象类来表现张量链的运算或数据状态转换。如图5-7所示&#xff0c;张量链的结构…

3.3 泰勒公式例题分析

例1 写出函数f(x)带有拉格朗日余项的n阶麦克劳林公式 我的答案&#xff1a; 一、信息 1.f(x)的表达式 2.目标求这个f(x)的n阶麦克劳林公式 二、分析 条件1&#xff1a;告诉我f(x)的表达式为我后续带入公式做准备 条件2&#xff1a;告诉我用什么公式和此次求解的方向 三…

【ONE·C++ || 二叉搜索树】

总言 二叉树进阶&#xff1a;主要介绍二叉搜索树相关内容。 文章目录 总言1、基本介绍1.1、什么是二叉搜索树 2、相关实现2.1、基本框架2.1.1、如何构建二叉树单节点2.1.2、如何定义一个二叉搜索树 2.2、非递归实现&#xff1a;插入、查找、删除2.2.1、二叉搜索树插入&#xf…

系统集成项目管理工程师 笔记(第16章:变更管理)

文章目录 16.1.2 项目变更的分类 50416.1.3 项目变更产生的原因 50516.2 变更管理的基本原则 50516.3 变更管理角色职责与工作程序 50616.3.1 角色职责 50716.3.2 工作程序 50716.4.1 变更管理操作要点 511 第16章 变更管理 504 16.1 项目变更的基本概念 504 项目变更是指在信息…

05 KVM虚拟化Linux Bridge环境部署

文章目录 05 KVM虚拟化Linux Bridge环境部署5.1 安装Linux Bridge5.1.1 安装bridge-utils软件包5.1.2 确认安装是否成功 5.2 配置Linux Bridge5.2.1 创建网桥br05.2.2 将物理网卡ens33绑定到Linux Bridge5.2.3 配置ens33的ip5.2.4 为Linux Bridge网桥br0分配ip5.2.4.1 DHCP设置…

JavaWeb04(登录绑值模糊查询功能实现连接数据库)

目录 一.实现登录功能 2.2 制作简易验证码 2.3 完成登录验证 2.4 登录实现 ①连接字符串 private static final String URL"jdbc:oracle:thin:localhost:1521:orcl"; ②加载驱动 OracleDriver private static final String URL"jdbc:oracle:thin:localh…

更好地提问ChatGPT_常用prompt表

对常见的用途&#xff0c;记录该表以便获得ChatGPT更高质量的回复。 类别目的提问方式要点文案写作周报、日报、年终总结本周我做了以下几件事情&#xff1a;出差客户办事处、交流演示、初步数据分析。请帮我写一份周报要点形式列举工作内容。可以说明职位&#xff0c;以便工作…

【五一创作】web小游戏开发:华容道(一)

web小游戏开发:华容道(一) 华容道htmlcss素材原图素材验证游戏关卡华容道 老顾儿时的记忆啊,也是一个经典的益智游戏。 游戏规则就不用再介绍了吧,就是让曹操移动到曹营就算胜利。 CSDN 文盲老顾的博客,https://blog.csdn.net/superrwfei html 经过上次的扫雷,大家应…

JavaScript 内存泄漏

内存的释放流程&#xff1a; 分配内存内存中的读写垃圾回收 对于内存的使用&#xff0c;所有语言基本都是一样的&#xff0c;只是更底层的语言在对于 ”分配内存“ 和 ”使用内存“ 是明确的&#xff0c;但是在高级语言中&#xff08;比如本文的 JS&#xff09;是隐藏了。 JS …

『python爬虫』05. requests模块入门(保姆级图文)

目录 安装requests1. 抓取搜狗搜索内容 requests.get2. 抓取百度翻译数据 requests.post3. 豆瓣电影喜剧榜首爬取4. 关于请求头和关闭request连接总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 安装requests …

Spring 中的顺序问题(别迟疑就是你想知道的顺序问题)

Spring 中的一些顺序问题 Spring 中的顺序问题并不是不重要&#xff0c;比如多个 BeanFactoryPostProcessor如何知道先执行哪一个&#xff1b;为什么自定义的 Bean 可以覆盖默认的自动装配的 Bean&#xff1b;AOP 拦截器链中拦截器的顺序是如何确定的等等问题。 相信看完这篇…

(数学知识)试除法判断质数,分解质因数,埃式与线性筛质数

质数 质数是指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的自然数。 试除法判定质数 你会发现如果说一个数要分成两个数相乘的话&#xff0c;那么这两个数肯定都是成对出现的&#xff0c;有一大一小的相对关系。因此不需要从2遍历到n&#xff0c;循环的…

AI智能课程:第七讲-不会写代码?有chatGPT不用慌

chatGPT辅助自动化测试-常见用途 根据代码写需求 作为python编程小白&#xff0c;如何安装python环境 ### 怎么用python发送http请求 如何在http请求中&#xff0c;请求头带上token值&#xff0c;怎么发送请求 websrvice协议&#xff0c;用python语言基于websrvice发送请求…

【数据结构】第十三站:排序(下)归并排序

文章目录 一、归并排序递归法1.归并排序的基本思想2.归并排序的代码实现 二、归并排序非递归1.可否使用栈来模拟&#xff1f;2.直接改非递归(简化版)3.处理边界之一把梭哈4.处理边界之归并一次拷贝一次 一、归并排序递归法 1.归并排序的基本思想 归并排序&#xff08;MERGE-SO…

网络安全事件调查,如何追溯攻击者的行踪和攻击路径

在当今互联网的世界里&#xff0c;网络安全已成为一个非常重要的话题。随着网络攻击的不断增加&#xff0c;如何保护我们的网络安全已成为一个严峻的挑战。为了防止网络攻击&#xff0c;需要了解攻击者的行踪和攻击路径&#xff0c;以便更好地预防和应对网络攻击。 网络安全事…

SQLite 用C语言开发的原因有哪些?

SQLite 用C语言开发的原因有哪些&#xff1f; 一、引言1.1、SQLite是什么&#xff1f;1.2、SQLite的历史和现状 二、SQLite的优点三、使用C语言开发SQLite的原因3.1、C 语言的优势3.2、对比其他编程语言 四、SQLite与其他数据库的对比4.1、关系型数据库MySQL4.2、关系型数据库P…