「Activiti精品 悟纤出品」activiti介绍-十万个为什么 - 第321篇

1.1 为什么要学习Activiti

       为什么要学习业务流程管理框架呢?学习它干嘛?

工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”。

以公司的报销流程为例:

小明--->提交申请--->人事审批-->经理审批-->财务审批--->结束

       我们先思考一下,需要实现这的一个需求我们需要怎么做?

       我们可能需要去维护一个变量,来不断传递过去下一个处理者,或者是建相关的任务表之类的,如果需求不会变,没有什么条件处理,这样也好设计。

       但是,如果有条件【不同职位员工审批方式不一样】,需求更改了【不需要人事审批了】,那么我们的代码就会乱,不好维护。

       再来看这种问题就是一种流式的控制管理,基于这么一个原因,我们需要学习一个框架来帮我们完成并管理这样的报销流程,他可以在上级点击同意后自动将提交记录录到电脑并流转到下一节点,这就是我们这里要讲的工作流技术。

       采用工作流管理系统的优点

(1)提高系统的柔性,适应业务流程的变化

(2)实现更好的业务过程控制,提高顾客服务质量

(3)降低系统开发和维护成本

 

1.2 嵌入式和独立部署

嵌入式部署即将流程引擎嵌入部署于Web应用中,这是最容易也是最简单的方式。

独立部署即流程引擎被独立运行,Web应用通过Rest API或者其他方式调用流程引擎的接口。Activiti引擎实现了一套Rest API,SWF也实现了完整的API结构,包括各个语言的版本。

独立部署的好处就是,引擎独立运行,和外部系统很好的解耦了,外部系统的故障不会导致工作流引擎的崩溃。

 

1.3 Activiti 6新特性

       和Activiti5相比,先有一个总体的认知:

Activiti6最大的变化点就是对代码进行了重构,该版本修复以往的Bug并不多,但内部实现相对来说变化比较大。

       再来看下具体有啥特性呐?

(1)新增两款新引擎Form引擎和DMN引擎(动态引擎)。其中DMN引擎允许开发人员创建自己的决策表。可以通过变量和定义的规则方式从决策表中计算结果。这些决策表的数据可以被rule task调用,决策表与流程实例是完全隔离的,相互之间不需要知道对方的存在。Form引擎可以通过Activiti6 UI界面进行配置,通俗一点的理解就是Activiti6将Form表单独立出来了。Form表单信息可以以JSON格式进行定义和使用。Activiti6 UI 默认包括新的规则引擎和表单引擎。

(2)新增ad-hoc子流程。

(3)作业执行器被重构。Activiti6版本仅保留了Activiti5版本中的异步作业执行器(async executor)。定时作业被划分了四个不同的表:executablejobs, timer jobs, suspended jobs 和deadletter jobs。引擎可以更快的执行作业。定时器作业在新的版本存储于单独的表中,一个线程会定时轮训需要执行的作业,快到期的作业会被添加到suspended jobs表中。重试的作业已经被干掉了,需要重试的作业会被添加到deadletterjobs表中。这样的重构意义主要是为了提高查询效率,可以执行的作业可以很快的被查询出来。

(4)作业执行器通过消息队列的方式进行。

(5)瞬态变量的引入。瞬态变量不会存储到 Activiti 变量表中,但仍为单一的事务持续时间执行。比如可以在REST服务之间进行调用的时候使用,或者使用于Java service task。

(6)引入了事务依赖监听器

(7)Activiti 6 UI 程序中,添加了DMN编辑器

(8)对于多实例节点而言,添加了终止多实例节点的相关方法。这个特性允许开发人员使用API结束多实例所有节点的执行。

(9)优化补偿活动行为和在子流程中的使用。

(10)大量重构 Activiti 6 UI 应用程序,例如应用程序中定义现在部署作为正常的活动部署,没有为其单独的应用程序定义表。

…….



 

1.4 Activiti 7新特性

       Activiti7与Activiti5和Acticiti6有了很大的改变,Activiti7好像基本叫Activiti Cloud7,专注于cloud的开发,包括与Zuul、Eureka、Zipkin、Sping Cloud、Docker、Kubernetes、ELK、Jenkins(持续集成)等功能;同时还包括一些我们用不到的云方面的功能,包括Cloud Native(云原生?)、KNative(谷歌的serverless开源框架)、Istio(service mesh的一个开源实现)、JHispter(前端的微服务框架?)、AWS(肯定不会与阿里云整合的)等。

比activiti6多的功能(罗列一小部分):

(1)流程定义重写;流程定义支持XML/JSON/SVG三种风格

(2)身份管理和SSO(KeyCloak 实现);

(3)网关(Zuul)、应用程序注册表(Eureka)、SSO 和IDM(Keycloak )、所有服务都启用了Docker、所有的服务都可以部署到Kubernetes;

(4)集成事件和云连接器;

(5)示踪剂(Zipkin)、ELK 堆栈支持(可选);

(6) 流程引擎清理和重构;

(7)电子邮件服务;

······

 

1.5 Activiti对于JDK版本的要求

Activiti7:2019年3月18之前发布的Activiti Cloud版本只能在JDK11中运行,Activiti  Cloud SR1版本开始JDK8。

Activiti6:JDK 7+

Activiti5:JDK 6+

 

1.6 在Spring Boot中集成Activiti是否依赖于Activiti的Getting Started

       从官网可以看到对于Acitiviti有一个GettingStarted可以下载运行,然后跑通整个Activiti的流程(这个在后面我们会相应的文章进行介绍)。

那么问题来了,对于如果要在Spring Boot中药集成Activiti的话,这个Getting Started是否有一定要下载安装呐?

       答案是:不需要。对于activiti的整个流程的操作就是jar文件的api,对于官网的GettingStarted也只是调用了这些api,使用demo的方式演示了这个流程而已。

 

1.7 Activiti的用户体系和我们自己的用户体系怎么打通呐?

       流程的发起必然会牵涉到用户和角色,我们就谈下用户,对于角色也是一样的。

       Activiti有一套自己的用户体系进行流程的分配,对于我们自己的系统一般都会设计一套自己的用户体系记住,那么这时候Activiti的用户体系和我们的体系怎么关联呐?

       在实际中我们肯定是以我们的用户体系为主的,所以我们只需要关注我们自己的用户体系就好了,对于activiti的设计,还是很灵活的,在通过api发起流程的时候,是允许指定我们用户体系的用户信息的。


购买完整视频,请前往:http://www.mark-to-win.com/TeacherV2.html?id=287