Camunda BPM基本概念
历史聚焦:2012年,Camunda宣布从Activiti分裂出一个新的开源工程,那就是Camunda BPM。
Camunda BPM平台是工作流和过程自动化的灵活框架。它的核心是在Java虚拟机中运行的本机BPMN 2.0流程引擎。它可以嵌入到任何Java应用程序和任何运行时容器中。它与Java EE 6集成,是Spring框架的完美匹配。在流程引擎之上,您可以从一堆工具中进行人为工作流管理,操作和监控。
Camunda BPM是一个基于Java的框架。主要组件以Java编写,我们一般侧重于为Java开发人员提供在JVM上设计,实施和运行业务流程和工作流所需的工具。然而,我们也希望使流程引擎技术可用于非Java开发人员。这就是为什么Camunda BPM还提供了一个REST API,它允许您构建连接到远程进程引擎的应用程序。
Camunda BPM既可用作独立的流程引擎服务器,也可以嵌入到定制的Java应用程序中。
Camunda BPM围绕流程引擎组件构建。下图显示了Camunda BPM的最重要组件以及一些典型的用户角色。
流程引擎和基础设施
流程引擎,流程引擎是一个负责执行BPMN 2.0流程和工作流程的java库。它具有轻量级的POJO核心,并使用关系数据库进行持久化。ORM映射由mybatis映射框架提供。
Spring框架集成
CDI / Java EE集成
运行时容器集成(与应用程序服务器基础架构集成)
Web应用程序
REST API, REST API允许您使用来自远程应用程序或JavaScript应用程序的进程引擎。(注意:REST API的文档被分解到自己的文档中。)
Camunda Tasklist,用于人工流程管理和用户任务的Web应用程序,允许进程参与者检查其工作流任务并导航到任务表单,以便处理任务并提供数据输入。
Camunda Cockpit,用于进程监视和操作的Web应用程序,可让您搜索进程实例,检查其状态并修复损坏的实例。
Camunda Admin,用户管理的Web应用程序,允许您管理用户,组和授权。
Camunda Cycle,用于在不同建模工具和建模者之间同步BPMN 2.0过程模型的Web应用程序。
附加工具
Camunda Modeler:用于进程建模的Eclipse插件。
bpmn.io:BPMN Web建模器,用于我们的Web应用程序Cockpit和Tasklist,用于在浏览器中呈现BPMN 2.0进程模型。虽然bpmn.io仍在开发中,但它的API相当稳定。
Camunda BPM平台是一个灵活的框架,可以在不同的场景下部署。
在这种情况下,流程引擎作为应用程序库添加到自定义应用程序。这样,流程引擎可以轻松地在应用程序生命周期中启动和停止。可以在共享数据库之上运行多个嵌入式流程引擎。
在这种情况下,流程引擎在运行时容器(Servlet Container,Application Server,...)中启动。流程引擎作为容器服务提供,并且可以由部署在容器内部的所有应用程序共享。该概念可以与运行时提供的JMS消息队列进行比较,并可由所有应用程序使用。流程部署和应用程序之间存在一对一映射:流程引擎跟踪应用程序部署的流程定义,并将执行委托给相关应用程序。
在这种情况下,流程引擎被提供为网络服务。在网络上运行的不同应用程序可以通过远程通信通道与进程引擎进行交互。使进程引擎可远程访问的最简单方法是使用内置的REST API。不同的通信渠道如SOAP Webservices或JMS是可行的,但需要由用户来实现。
Camunda BPM Web应用程序基于RESTful架构。
使用的框架:
基于JAX-RS的Rest API
AngularJS
RequireJS
jQuery
Twitter Bootstrap
由camunda黑客开发的其他自定义框架:
camunda-bpmn.js:Camunda BPMN 2.0 JavaScript库
ngDefine:将AngularJS集成到RequireJS为动力的应用程序中
angular-data-depend:用于实现复杂数据的,繁重的AngularJS应用程序的工具包
为什么选 Camunda ?
做选型的时候,需要描述清楚需要什么样的功能和不需要什么样的功能。
我们项目的特点是什么?
流程以自动化为主
极少数节点需要人工操作(审批、补充信息)使用 java作为业务层语言
流程引擎必须作为一个服务存在,不能为了使用流程引擎而更改语言。
必须有一个机制,使得流程实例执行自动化操作时,请求业务层 API。流程同一时间最多只有一个节点在执行
不需要支持并行加签、多分支同时执行、单节点多并发执行。可以强行跳转到其他节点执行
由于业务的不确定性因素,难以或无法通过优化流程来预先规划好各种情况下的分支。
因此需要在自动化步骤出现某些无法预知的情况时,由运维修改流程实例的状态,跳过当前节点的执行或者回到前面的节点重新执行。可以重启一个处于结束或终止状态的流程实例
同样是业务的要求。支持多分支
有些流程引擎只能选择 “是” 或者 “否” 这两个分支,无法支持多种情况。支持失败重试
当自动化任务节点失败后,流程引擎需要支持重试当前节点。
接下来了解比较常见的流程引擎。例如 JBPM 、 Activiti 、 Flowable 、 Camunda 、 Zeebe 。
发展历史
2004 2006 2009 2010 2013 2015 2017 2018 2020
+----------------------------------------------------------------------------------------> JBPM
2 3 4 5 6 7 7.15 7.34
+ 推 翻 架 构
| 继 承
| 架 构
| 2010 2013 2015 2017 2018 2020
+-----------------------------------------------------------------------> Activiti
5 6 7 7.1
+ +
| |
| |
fork | fork | 2018 2020
| +------------------------------> Flowable
|
| 6 6.4 6.5
|
|
|
|
| 2015 2017 2018 2020
+---------------------------------------------------> Camunda
7.0 7.3 7.8 7.10 7.12 ^
|
| 同 团 队
|
v
2017 2018 2020
+-------------------------------> Zeebe
0.1 0.14 0。22
关注的点
比较关注的点有以下几个:
支持外部任务(External Task)
External Task 应该和 HTTP Task 做对比。
对于 HTTP Task ,在执行的时候会请求一个 HTTP API。等待这个请求结束后,流程继续往下走。这里的问题是:
当 Camunda 执行到外部任务节点时,会发布一个任务单元。外部系统定时向 Camunda 获取外部任务单元,然后做一些业务逻辑或者请求 HTTP API。做完之后,再提交给 Camunda,流程继续往下走。
外部任务具有超时时间。这个时间后,其他客户端请求接口可能获取到该任务。但可以请求 API 延长超时时间。
一个外部任务只能被一个客户端获取,获取后会加上一个锁。除非超时,否则只有获取到该任务的客户端可以继续操作。
外部任务可以配置优先级,并且这个优先级可以动态修改。
外部任务支持重试。当以任务处理失败的方式提交给 Camunda 后,Camunda 会检查配置的重试次数有多少,当前剩下多少。如果还有次数,则再次将该任务发布出去。
可以专门实现一个 External Task Client ,实现一套根据情况请求业务 API 的方式。虽然同样是请求 HTTP API ,但是可以拥有更灵活的配置。
API 超时如何处理?如果业务修改导致 API 处理时间变长时,要修改所有流程里配置的超时时间吗?
如何区分测试环境和正式环境?
支持任意节点的跳转
实际上 Camunda 不是直接支持跳转。它支持取消某个节点的执行,也支持在任意节点创建一个执行。
如果要实现节点的跳转,需要封装两个操作:
在目标节点创建一个执行
取消当前节点的执行
支持重启(Restart)已经关闭的流程实例
虽然是叫重启,但实际上是创建一个新实例,然后将已关闭的流程实例的信息复制一份到这个新实例。
支持流程实例的迁移(Migration)
随着流程的更新,流程会有多个版本。每个流程实例会固定绑定一个流程版本,按照该版本的方式走。
Camunda 可以让旧版本的流程实例迁移到其他版本的流程,目标流程版本可以是更新的,也可以是更旧的。
迁移分为两步:执行迁移的时候,可以从迁移计划中选择一部分流程实例做迁移。并且可以指定迁移后从哪个节点开始走(继续)。
生成迁移计划
执行迁移
支持批量(Batch)操作的 API
例如批量挂起流程实例、批量激活流程实例、批量重启流程实例
流程图绘制工具有桌面版本
你可以把流程图绘制工具下载到 Windows 系统上(其他系统也支持),绘制完流程图后,通过这个工具把流程图发布到 Camunda 。
你可以直接把这个软件丢给需求方,让他们把理想中的流程图绘制出来。Camunda 的流程绘制工具对业务方和开发者都是友好的。
甚至如果你不是为了将流程图发布到 Camunda ,仅仅想绘制一个流程图,这个工具也很好用。
Activiti 需要搭建后端服务才能通过 web 的方式绘制流程图,而且它是偏向于开发者的。
除此之外, Camunda 和其他流程引擎一样,支持以下功能:
定时节点(Timer Intermediate Catch Event)
可以选择相对时间或者绝对时间。例如 10 分钟之后继续往下走或者 2021-11-11 的 11:11:11 的时候往下走。
时间的语法采用 ISO 8601 标准。这个标准在编程语言库中基本都会支持。
可以设置时间常量,也可以引用流程引擎变量。在执行到定时节点之前设置或者修改时间。
网关节点(Gateway)
汇聚多个分支。不同网关有不同的作用。常用的互斥网关(Exclusive Gateway)表示与其相连的下游分支的条件中,一旦有一个分支的条件符合要求,就走那个分支,并且不再继续判断其他分支条件。
消息接收节点(Receive Task)
流程引擎在执行到该节点的时候,会等待一条消息。客户端向该流程实例发送这条消息,流程继续往下走。
执行监听器(Execution Listener)
当以下事件发生时,会触发一次通知:
可以为 Camunda 写一个扩展,用于通知流程实例的状态。
流程实例的开始和结束
流程实例内一个节点的开始和结束
开源地址
关注公众号 回复 20241102 获得
猜您喜欢:
【开源】支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。
【开源】五脏俱全,组件独立,可扩展的国产工作流引擎
【开源】采用无代码设计理念,为企业提供「免费」表单问卷能力,「开箱即用」快速赋能业务
【开源】面向中小企业的进销存管理PSI和仓库管理系统WMS,无需编写任何代码就能增加常规功能,亦支持高效开发复杂功能。
【开源】国人制作的在NAS里面搭建一套个人专属的网页导航面板
添加微信进相关交流群,
备注“微服务”进群交流
备注“低开”进低开群交流
备注“AI”进AI大数据,数据治理群交流
备注“数字”进物联网和数字孪生群交流
备注“安全”进安全相关群交流
备注“自动”进自动化运维群交流
备注“试用”可以申请产品试用
备注“渠道”可以合作渠道信息
备注“定制”可以定制项目,全源码交付
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/76205.html