Flowable 工作流引擎
Posted 百果科技研发团队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable 工作流引擎相关的知识,希望对你有一定的参考价值。
工作流定义
WfMC(Workflow Management Coalition)工作流管理联盟对工作流的定义:工作流是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。工作流引擎说的直白一点就是封装好的一种框架,对流程相关功能进行增删改查,我们利用这种框架来解决需要多个人或者多个部门协同完成的某项工作。
工作流框架有许多都是开源的,如果你对工作流引擎有所了解,那么一定知道 Java 领域当前主流的工作流引擎无非就是 Jboss 旗下的 JBPM 和 Alfresco 旗下的 Activiti;但是今天主要讲的是 Flowable,Flowable 是 Activiti 原班主创人员从 Activiti 分离出来的一套工作流引擎,是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的 BPMN2 流程引擎,易于与 Spring 集成使用。
从程序员的角度来看为什么我们需要工作流
每一个程序员,在接触到工作流的时候,都会有这么一个疑问 —— 我用一般的方法可以实现,为什么还要用工作流?
使用到工作流的地方:第一,他们都是多个人或者不同部门一起协同完成的任务;第二,或许他们有繁琐的流程,如果当业务和流程挂钩,业务系统将会看起特别乱,所以把这部分流程相关的工作从业务系统拉出来单独处理。
下面举个简单的例子 - 订货流程:
如果不使用工作流技术,从头开始开发这个订购流程的业务逻辑,我们需要:
每个活动点都需要开发交互页面和后台处理程序
每个活动的流转都需要硬性判断下一步活动节点及其操作人
每次操作都需要维护业务数据和流程的相关数据
有了工作流引擎:
使用专门的流程数据系统,维护所有涉及流程流转的数据。
提供 “流程设计” 工具,帮助用户定义订货流程的模型,而且一般都提供了可视化的界面。
所有的流程都依靠流程引擎来处理,避免了需求更改与硬编码之间矛盾的产生。
工作流引擎还提供了众多的 API,可以很方便的将工作流的管理和业务操作完美结合。
Flowable 引擎简述
Flowable 核心
Flowable 核心是 Flowable Engine,其 API 提供各种功能,面向数据库数据操作,对工作流业务流转进增删改查。
如图几大模块的 Service:
RepositoryService - 部署相关
TaskService - 任务相关
IdentityService - 认证身份相关
RuntimeService - 流程运行相关
ManagementService - 管理与监控相关
HistoryService - 流程历史相关
FormService - 表单相关
扩展模块
Modeler - 主要作用于流程定义与部署
Task - 主要作用于开启流程实例与任务的操作
Admin - 主要作用于流程引擎管理与监控
Rest - 主要提供 Restful 接口,其接口内容封装了 Engine 里面的 API
Idm - 主要用户认证和身份管理
使用方式
方式一、Spring 与 Flowable 整合,使用 Maven 加入 Engine 的依赖:
<dependency> <groupId>org.flowable</groupId> <artifactId>flowable-engine</artifactId> <version>6.3.1</version> </dependency>
方式二、通过 Docker 镜像跑
例如部署 rest 模块:docker run -p8080:8080 flowable/flowable-rest
方式三、Flowable 官网下载:https://www.flowable.org/,把 war 包放 tomcat 跑
扩展模块
Modeler - 主要作用于流程定义与部署
Flowable 提供了 Modler 流程设计器,能很好的与 Flowable 的 Task、Admin 模块关联使用,Modeler 主要作用是定义 BPMN,BPMN 定义了一个业务流程图(Business Process Diagram),该业务流程图基于一个流程图(Flowcharting),该流程图被设计用于创建业务流程操作的图形化模型
Modeler 具有的功能:
设计流程 - 结合 Groovy 脚本
设计 Form 表单 - 业务表单
部署流程 - 发布流程定义
流程定义设计器常用功能:
StartEvent - 开启事件 【流程入口】
UserTask - 用户任务 【可以理解为待办事项,需要人工执行流程才会继续往下走】
ServiceTask - service 任务 【引用项目的 Java 类,必须实现 DelegateExecutionListener 或者ExecutionListener,并重写方法中写业务逻辑】
ScriptTask - 脚本任务 【默认支持 Groovy 和 javascript,注意点:Script Format 需指明是哪种脚本语言】
Exclusive Gateway - 排他网关 【类似条件判断选择走哪条路线判断条件需要写在线上】
边界事件 - 定时 【UserTask 超时或定时执行】
边界事件 - 异常事件【边界事件执行异常执行】
如下图:请假流程设计页面
2、Task - 主要作用于开启流程实例与任务的操作
Task 模块能根据当前登录,进行获取待办事项,同时也具有启动流程实例的功能;Task 任务需要 Form 表单的支持才能更好发挥效果
Task 具有的功能:
发起流程实例
查看流程实例流程图
查看待办
签收待办
完成待办事项
下图开启流程实例
下图查看流程实例图
3、Admin - 主要作用于流程引擎管理与监控
Flowable 具有五大流程 Engine,分别是 Process Engine,CMMN Engine, Form Engine,DMN Engine, Content Engine,Admin 对这五大模块进行很好的管理,主要使用ProcessEngine 功能,对流程实例进行探察和操作,比如修改流程变量,关闭流程实例,更改待办人,或者帮忙完成待办事项等功能。
Admin 具有的功能:
查看流程部署、定义、实例、任务
监控业务流程
修改流程实例、任务等相关信息
4、Rest - 主要提供 Restful 接口,其接口内容封装了 engine 里面的 API
Rest 的 war 包部署后,直接访问 http://localhost:8080/flowable-rest/docs,BasicAuth 账号密码是 admin/test,6.3.1 版本账号密码是 rest-admin/test;然后显示 swagger 接口页面
Rest 具有的功能:
提供 Restful 接口,接口内容实质是封装了 Engine 的 API
有流程、任务、历史、表单相关等接口
Flowable 作为一个独立服务
Flowable 核心 - Engine 和数据库
流程引擎对业务流程的流程定义,流程部署,流程实例,流程任务,流程历史,流程表单等功能提供了友好的支持,其中 Engine 提供了 RepositoryService( 部署相关)、TaskService(任务相关)、IdentityService(认证身份相关)、RuntimeService(流程运行相关)、ManagementService(管理与监控相关)、HistoryService(流程历史相关)的 API,可以根据官网文档用(https://www.flowable.org/docs/userguide/index.html#chapterApi)。
独立服务
随着 SOA 浪潮的到来,BPM 基于 SOA 已经是一种必然趋势,那如何把 Flowable 工作流引擎打造成独立的服务呢?只需要完成下面几步:
Flowable 扩展模块 Modeler、Task、Admin、Rest 的部署
Idmcas 认证服务:提供 Modeler、Task、Admin 扩展模块登录认证服务,独立维护用户信息。
workflow-api 网关项目:作为 Flowable 工作流引擎对外的网关,服务于业务系统,可以调用Restful 接口或结合 Engine 的 API 提供相应的业务功能
回调功能:
方法一:通过 Groovy 脚本回调业务系统接口,例如审核通过回调改变订单状态接口。
方法二:结合 Dubbo 动态调用服务接口。
Groovy 脚本使用
Groovy 是一种基于 JVM(Java虚拟机)的脚本语言,能与 Java 无缝结合,是种弱语言,具有预编译功能
Groovy 结合 Grape 依赖管理器 Grape 是一个内嵌在 Groovy 中的 JAR 依赖项管理器。它能使你在类路径上快速添加 Maven 库依赖项,更易于编写脚本。
最简单的用法是在脚本上添加注释如下:
Gxecution 对流程执行进行操作,比如设置流程实例参数,获取流程实例参数等
Grooy 使用 HTTPBuilder 进行 http 请求
Flowable 的 Idm 认证更换成 cas 登录
描述
Flowable 源码 idm 采用 security 进行认证,为了人员信息和权限由百果园自身的 cas 管理,配合其他模块,模拟 idm 认证方式替换成百果园自身的 idmcas 认证项目。通过分析 Flowable 源码,发现具有验证功能的过滤器 FlowableCookieFilter,这个过滤器类主要功能获取有用 Cookies,并从 Cookies 获取有用值,验证该值是否正确,正确则通过 tokenId 并获取Token 和用户信息,不正确则重定向到登录页面。
FLowable 源码 - FlowableCookiesFilter 解析
Flowable 源码 common-ui 模块中的过滤器 FlowableCookiesFilter,对认证进行拦截
主要功能分为三部分:
1、doFilterInternal,先判断是否有有用 token,如果没有则重定向到登录链接
2、initTokenCache【根据 cookies 中获取 FLOWABLE_REMEMBER_ME 的值然后 decode 出 id,然后根据 id 从 idmcas 项目获取 token】
3、initUserCache【根据获取的 Token拿用户 id 去 idmcas 项目获取用户信息和权限等】
idmcas项目
第1步、上面 Filter 重定向到 idmcas 项目,idmcas 项目跳转到 login.html,目的是为了模仿Flowable 项目的 angular 功能,解析#片段,获取重定向的url和参数。
第2步、cas 拦截 login 登录接口,认证成功后,把用户信息放到 token 并把 token 放到Cookies里面
第3步、把 token 放到内存中,以便于后续登录获取 token
第4步、提供根据 tokenId 获取 token 接口
第5步、提供根据用户 ID 获取用户信息
总结
更换了 idm 成 idmcas,我们就可以单独的进行人员的维护,并赋予 Modeler、Task、Admin 这三个扩展模块的权限,主要用于运维人员设计并部署流程。工作流引擎最终的目的是把流程自动化,把运维人员从低效率、高强度、易犯错的人工操作彻底解决出来,让他们的能力与精力有更大程度的发挥。
对未来的展望:目前告警种类过多,很多流程上的异常告警,在经过人工分析后,多数是不需要处理的,我们的目标是系统能做一些基础的分析,并在自动诊断问题后,对问题进行自我恢复,对于有些需要人工介入的,也能做些初步的分析,同时把经过分析后的日志发送给处理人员,这样可以提高处理人员的效率。
以上是关于Flowable 工作流引擎的主要内容,如果未能解决你的问题,请参考以下文章
简报资讯创新业务应用,提升核心技术 ----迅腾公司开展“基于Flowable工作流引擎使用” 培训会