【工作流】Activiti工作流引擎架构设计原理总结

Activiti是由Alfresco软件发布的业务流程管理(BPM)框架。它为新的BPMN 2.0标准提供了支持,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现。

Activiti API

 Activiti API是与 Activiti 交互的最常见方式。中心起点是ProcessEngine,可以通过多种方式创建。从 ProcessEngine,您可以获得包含工作流/BPM 方法的各种服务。ProcessEngine 和服务对象是线程安全的。因此,您可以为整个服务器保留对其中 1 个的引用,然后通过ProcessEngine来获得以下的服务进行操作:

RepositoryService: 管理 Deployments

RuntimeService: 用于启动和搜索 流程实例 (ProcessInstance)

TaskService: 公开用于管理人工(独立)任务的操作,例如声明、完成和分配任务

IdentityService: 用于管理用户、组及其之间的关系

ManagementService: 公开引擎管理和维护操作,这些操作与业务流程的运行时执行无关

HistoryService: 公开有关正在进行和过去的流程实例的信息。

FormService: 访问表单数据和呈现表单,以启动新流程实例并完成任务。

事件侦听器的唯一要求是实现org.activiti.engine.delegate.event.ActivitiEventListener

数据库表结构

Activiti 的数据库名称都以ACT_ 开头。第二部分是表格用例的双字符标识。这个用例也将大致匹配服务 API。

ACT_RE_ *:RE代表repository. 带有此前缀的表包含静态信息,例如流程定义和流程资源(图像、规则等)。

ACT_RU_ *:RU代表runtime. 这些是运行时表,包含流程实例、用户任务、变量、作业等的运行时数据。Activiti 只在流程实例执行期间存储运行时数据,并在流程实例结束时删除记录。这使运行时表既小又快。

ACT_ID_ *:ID代表identity。这些表包含身份信息,例如用户、组等。

ACT_HI_ *:HI代表history. 这些是包含历史数据的表,例如过去的流程实例、变量、任务等。

ACT_GE_ *:general数据,用于各种用例。

流程符号说明

事件:包含开始事件、 中间事件、  结束事件

活动:包含   用户任务、   服务任务、  子流程

网关:分为并行网关、排他网关、包含网关、综合网关和事件网关。

     并行网关: 如:需要直接上级和领导审批完成

    排他网关:如:三天以下假期,不需要总经理审批,三天以上假期,需要总经理审批

    包含网关:如:当你请病假找项目经理审批,如果不是病假,找总经理审批

    综合网关:用来在流程中实现聚合决策。 当流程执行到这个网关,根据所设定的聚合规则进行计算,当聚合完毕时触发流转到下一节点。聚合规则可以是并行结束行为,也可以是多重聚合行为,或者多路聚合行为。

    事件网关:基于事件网关允许根据事件判断流向,用来在流转中实现异或分支决策。当流程执行到这个网关,网关的每个流出分支都要连接到一个中间捕获事件,网关会进入等待状态:流程会暂停执行。与此同时,会为每个流出分支建相对的事件订阅,当捕获取事件源时触发条件计算,计算结果为ture时分支被选中,其它分支将被忽略,并选取最先被选中的分支执行流转。

事件处理

Activiti 5.15 引入了事件机制。它允许您在引擎内发生各种事件时得到通知。

可以为某些类型的事件注册一个侦听器,而不是在调度任何类型的事件时收到通知。您可以通过配置添加引擎范围的事件监听器,使用 API 在运行时添加引擎范围的事件监听器,或者将事件监听器添加到BPMN XML 中的特定流程定义。

调度的所有事件都是 的子类型org.activiti.engine.delegate.event.ActivitiEvent。该事件自曝(如果有的话)type,executionId,processInstanceId和processDefinitionId。

总结

到目前为止,Activiti共有三个版本体系:

activiti5.x ,这是很多公司在使用的版本,虽然后面有新的版本,但是很多公司目前使用的还是activiti5

activiti6.0 ,最大的变化点就是对代码进行了重构,该版本修复以往的Bug并不多,但内部实现相对来说变化比较大,如 只支持Async Executor,Async Executor 将以可插拔的方式,支持两种模式;ACT_RU_JOB表被拆分,减少了以往处理timer和异步任务时轮询这张表的压力,提高处理高负载高并发任务的能力

activiti7.x,把之前的API进行了封装,使用新的ProcessRuntime和TaskRuntime进行流程与任务的控制,并且默认使用SpringSecurity进行身份控制。以及弃用了activiti modeler改为BPMN-JS等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值