关历史文章(阅读本文前,您可能需要先看下之前的系列👇

国内最全的Spring Boot系列之三

2020上半年发文汇总「值得收藏」

GraphQL的探索之路 – SpringBoot集成GraphQL之Mutation篇四 - 第317篇

RocketMQ安装Linux/Mac/Window - 第318篇

程序CPU占用率飙升,如何定位线程的堆栈信息?「超详细,值得收藏」看不懂还有配套视频 - 第319篇

「工作流Activiti」介绍-新手上路,注意安全 - 第320篇

 

师傅:上一节,我们对于Activiti要了一个基本的认识了,这一节我们来…

悟纤:(不等师傅说完)是不是这一节要来实战下了。

师傅:上一节不就和你说了,还有些东西没讲完的嘛?你带耳朵没有。

悟纤:(师傅今天是不是吃炸药了,火气还不小呐,不能忍)我以为师傅就是开开玩玩玩笑呐。

师傅:好了,还是让我们赶紧进入主题吧,赶紧把这枯燥的基本认识学完。

 

前言

       上一节对于Activiti有了一个基本的认知,原本这节的内容是要上一节一起写完的,但是写着,写着内容就多了,还是分两节进行说明,这样大家能够比较好的进行消化(博主也能tuo ge lan)。

 

一、Activiti十万个为什么?

 

 

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发起流程的时候,是允许指定我们用户体系的用户信息的。

 

学习资料

(1)Spring Boot中集成Activiti

https://spring.io/blog/2015/03/08/getting-started-with-activiti-and-spring-boot

(2)Activiti资料

Activiti 官网:https://www.activiti.org

ActivitiGithub 开源地址:https://github.com/Activiti/Activiti

Activitiv7.X 官方开发手册:https://activiti.gitbook.io/activiti-7-developers-guide/

Activitiv6.X 官方开发手册:https://www.activiti.org/userguide/

Activitiv5.X 官方开始手册:https://www.activiti.org/5.x/userguide/

《Activiti 5.x 用户指南》

http://waylau.gitbooks.io/activiti-5-x-user-guide/

https://www.cnblogs.com/xtreme/p/3638810.html

 

悟纤小结

悟纤:好了,又到了快要下课的时候了,我和大家来总结下吧。

(1)不同版本的Activiti对于JDK的版本是有要求的,5.x是JDK6+,6.x版本是JDK7+,7.x版本是JDK8+。

(2)对于Activiti的使用有两种方式:嵌入式和独立部署。

(3)使用工作流引擎的好处就是提供提醒的柔性,降低系统开发和维护成本。

       

 后续文章计划:

 

「Activiti精品 悟纤出品」Activiti6 Getting Started- 稳扎稳打

「Activiti精品 悟纤出品」Activiti7 Getting Started-摸石头过河

「Activiti精品 悟纤出品」流程模型搭建-小试牛刀

……

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

学院中有Spring Boot相关的课程:

à悟空学院:https://t.cn/Rg3fKJD

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

深入理解JVM内存模型/调优实战:http://t.cn/A6wWMVqG

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐