本文为博主原创文章,未经博主允许不得转载。不允许将博客的内容(包含博客文章的文字、代码片段、图片、视频、评论、出现的名词、或者代码片段等)复制到gitee/github等网站形成GPL-3.0协议。如果上述项目中复制任何一段代码,该项目开源协议自动失效。不允许任何组织或者个人对文章进行拆解去申请软件著作权。违反该规定将追究法律责任。
本文链接:
https://blog.csdn.net/qq_30739519/article/details/123657887
存在两种类型的作业:定时器(例如属于用户任务上的边界事件的定时器)和异步延续(属于具有流动性:异步=“真”属性的服务任务)。
定时器是最容易解释的:它们在ACT_RU_TIMER_JOB表中持有一定的到期日期。异步执行程序中有一个线程定期检查是否有新的定时器应该触发(换句话说,截止日期是在当前时间之前)。发生这种情况时,定时器将被删除,并创建一个异步作业。
在执行流程实例步骤期间(即在进行某个API调用期间),将异步作业插入到数据库中。如果异步执行程序对当前的Flowable引擎有效,则异步作业实际上已经被锁定。这意味着作业条目被插入到ACT_RU_JOB表中,并且将有一个锁拥有者和一个锁过期时间组。一个成功提交API调用的事务监听器触发同一个引擎的异步执行器来执行作业(所以数据保证在数据库中)。为此,异步执行程序具有一个可配置的线程池,线程将从该线程池执行该作业并异步地继续该过程。如果Flowable引擎没有启用异步执行程序,则将异步作业插入到ACT_RU_JOB表中而不被锁定。
类似于检查新定时器的线程,异步执行程序有一个线程获取新的异步作业。这些是表中没有锁定的作业。此线程将锁定当前Flowable引擎的这些作业并将其传递给异步执行程序。
执行作业的线程池使用内存队列从中进行作业。当这个队列已满(这是可配置的),作业将被解锁并重新插入到它的表中。这样,其他的异步执行者可以代替它。
如果在作业执行期间发生异常,则异步作业将转换为具有截止日期的计时器作业。之后,它将像普通的定时器工作一样被选中,并再次成为一个异步工作,很快就会被重新尝试。如果某个作业重试了(可配置的)次数并继续失败,则认为该作业已经死机并移至ACT_RU_DEADLETTER_JOB。该死信概念被广泛应用于各种其他系统。管理员现在需要检查失败作业的例外情况,并决定最佳的行动方式。
流程定义和流程实例可以暂停。将与这些定义或实例相关的挂起作业放入ACT_RU_SUSPENDED_JOB表中,以确保获取作业的查询在where子句中具有尽可能少的条件。
有一点从上面可以清楚的看出:对于那些熟悉这个工作/异步执行者的旧实现的人来说,主要目标是允许获取查询尽可能简单。在过去的(V6之前),用于所有作业类型/状态,这使一个表中的其中条件的大,因为它照顾到所有用例。现在这个问题已经解决,我们的基准已经证明这个新的设计提供了更好的性能,并且更具可扩展性。
异步执行程序是一个高度可配置的组件。总是建议查看异步执行程序的默认设置,并验证它们是否符合您的进程的要求。
或者,可以扩展默认实现,或者将org.flowable.engine.impl.asyncexecutor.AsyncExecutor接口替换为您自己的实现。
流程引擎配置通过setter提供以下属性:
表1.异步执行程序配置选项
名称
|
默认值
|
描述
|
asyncExecutorThreadPoolQueueSize
|
100
|
执行作业的队列的大小在被线程池中的线程实际执行之前被放置
|
asyncExecutorCorePoolSize
|
2
|
线程池中用于执行作业的最小线程数。
|
asyncExecutorMaxPoolSize
|
10
|
线程池中为作业执行而创建的最大线程数。
|
asyncExecutorThreadKeepAliveTime
|
5000
|
用于作业执行的线程在被销毁前必须保持活动状态(以毫秒为单位)。设置> 0需要资源,但是在执行多个作业的情况下,它总是避免创建新的线程。如果为0,线程在用于执行作业后将被销毁。
|
asyncExecutorNumberOfRetries
|
3
|
将作业转移到死书表之前将被重试的次数。
|
asyncExecutorMaxTimerJobsPerAcquisition
|
1
|
在一个查询中获取的计时器作业的数量。默认值是1,因为这降低了乐观锁定异常的可能性。较大的值可以执行得更好,但在不同引擎之间发生乐观锁定异常的机会也会变得更大。
|
asyncExecutorMaxAsyncJobsDuePerAcquisition
|
1
|
在一个查询中获取的异步作业的数量。默认值是1,因为这降低了乐观锁定异常的可能性。较大的值可以执行得更好,但在不同引擎之间发生乐观锁定异常的机会也会变得更大。
|
asyncExecutorDefaultTimerJobAcquireWaitTime
|
10000
|
定时器获取线程的时间(以毫秒为单位)将等待执行下一个查询。发生这种情况时没有找到新的计时器作业,或者获取的计时器作业比asyncExecutorMaxTimerJobsPerAcquisition中设置的时间少。
|
asyncExecutorDefaultAsyncJobAcquireWaitTime
|
10000
|
异步作业获取线程的时间(以毫秒为单位)将等待执行下一个查询。发生这种情况时没有找到新的异步作业,或者获取的异步作业少于asyncExecutorMaxAsyncJobsDuePerAcquisition中的设置。
|
asyncExecutorDefaultQueueSizeFullWaitTime
|
0
|
当内部作业队列已满时,异步作业(包括定时器和异步继续)获取线程的时间(以毫秒为单位)将等待执行下一个查询。默认情况下设置为0(为了向后兼容)。将此属性设置为更高的值可以使异步执行程序有希望清除队列。
|
asyncExecutorTimerLockTimeInMillis
|
5分钟
|
计时器作业的时间量(以毫秒为单位)被异步执行程序获取时锁定。在这段时间内,没有其他异步执行者会尝试获取和锁定这个工
|
作。
|
|
|
asyncExecutorAsyncJobLockTimeInMillis
|
5分钟
|
异步作业被异步执行程序获取的时间量(以毫秒为单位)被锁定。在这段时间内,没有其他异步执行者会尝试获取和锁定这个工作。
|
asyncExecutorSecondsToWaitOnShutdown
|
60
|
请求在执行程序(或进程引擎)关闭时等待
|
asyncExecutorResetExpiredJobsInterval
|
60秒
|
过期作业的两次连续检查之间的时间量(以毫秒为单位)。过期的作业是锁定的作业(锁定所有者+时间是由某个执行者编写的,但是作业从未完成)。在这种检查过程中,过期的作业将再次可用,这意味着锁拥有者和锁定时间将被移除。其他执行者现在将能够拿起它。如果锁定时间在当前日期之前,则认为工作已过期。
|
asyncExecutorResetExpiredJobsPageSize
|
3
|
由异步执行程序的重置过期线程立即提取的作业数量。
|
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
Flowable入门系列文章184 - 异步执行器设计和配置
flowable入门、flowable现状、flowable开源产品、flwoable入门系列、flowable课程、flowable与activiti区别Flowable是用Java编写的轻量级业务流程引擎。Flowable流程引擎允许您部署BPMN 2.0流程定义(用于定义流程的行业XML标准),创建流程定义的流程实例,运行查询,访问活动或历史流程实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发机器上进行的实例进行实现。
<p>本课程是《
Flowable
流程
入门
课程》的后续高级课程。在学习本课程前,应先学习
入门
课程,以掌握相关基础知识。高级课程着重讲解
Flowable
工作流
的高级概念、复杂理论和实战应用。课程内容包括
流程
管理思想、技术与标准、
工作流
的控制模式和资源模式;
Flowable
数据库表及变量;与Spring、Spring Boot的集成;
BPM
N 2.0主要类图;
Flowable
高级服务如
JAVA
服务
任务
、脚本
任务
、Web Service
任务
、外部工作者
任务
、多实例
任务
、补偿处理程序、子
流程
和调用活动等;
Flowable
事件侦听器、执行侦听器和
任务
侦听器;
Flowable
历史和REST API;
Flowable
事务、并发性、身份管理及LDAP集成;
Flowable
高级主题如
流程
实例迁移、
异步
执行器
的
设计
与
配置
、用于高并发的UUID ID生成器、多租户、高级
流程
引擎
配置
、执行自定义SQL和实验性
流程
调试器等;
Flowable
Eclipse
设计
器特性及定制;
Flowable
事件注册;
Flowable
相关标准和规范如ISO8601标准和cron等。</p>
<p>本课程对
Flowable
官方文档进行了彻底梳理和融汇贯通,并结合实践,形象生动、系统全面、简单易懂地呈现给大家,让大家从开源软件文档冗长耗时、英文晦涩难懂、概念理解困难、知识点分散等困境中解脱出来,从而能快速地将
Flowable
具有的高级特性应用到项目的高级需求和复杂实践中去。</p>
<p>课程特色:案例和代码驱动、基础概念与经典实战相结合、知识环节融会贯通、关联知识平滑拓展、概念和原理展示形象生动。</p>
flowable
入门
、
flowable
现状、
flowable
开源产品、flw
oa
ble
入门
系列
、
flowable
课程、
flowable
与activiti区别
Flowable
是用
Java
编写的轻量级业务
流程
引擎。
Flowable
流程
引擎允许您部署
BPM
N 2.0
流程
定义(用于定义
流程
的行业XML标准),创建
流程
定义的
流程
实例,运行查询,访问活动或历史
流程
实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发
机器上进行的实例进行实现。
如需下载源码,请访问https://github.com/fengchuanfang/Rx
java
2Tutorial
文章
原创,转载请注明出处:Rx
java
2
入门
教程五:
Flowable
背压支持——对
Flowable
最全面而详细的讲解
背压(backpressure)
当上下游在不同的线程中,通过Observable发射,处理,响应数据流时,如果上游发射数据的速度快于下游接收处理数据的速度,这样...
flowable
入门
、
flowable
现状、
flowable
开源产品、flw
oa
ble
入门
系列
、
flowable
课程、
flowable
与activiti区别
Flowable
是用
Java
编写的轻量级业务
流程
引擎。
Flowable
流程
引擎允许您部署
BPM
N 2.0
流程
定义(用于定义
流程
的行业XML标准),创建
流程
定义的
流程
实例,运行查询,访问活动或历史
流程
实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发
机器上进行的实例进行实现。
Flowable
核心内容
1.表结构讲解
工作流
程的相关操作都是操作存储在对应的表结构中,为了能更好的弄清楚
Flowable
的实现原理和细节,我们有必要先弄清楚
Flowable
的相关表结构及其作用。在
Flowable
中的表结构在初始化的时候会创建五类表结构,具体如下:
ACT_RE :'RE’表示 repository。 这个前缀的表包含了
流程
定义和
流程
静态资源 (图片,规则,等等)。
ACT_RU:'RU’表示 runtime。 这些运行时的表,包含
流程
实例,
任务
,变量,
异步
任务
,等运行中的数据。.
Flowable
源码地址:https://github.com/
flowable
/
flowable
-engine
Flowable
-6.7.2 源码注释地址:https://github.com/solojin/
flowable
-6.7.2-annotated
包路径:org.
flowable
.engine.impl.jobexecutor
AsyncCompleteCallActivityJobHandler
异步
完成调用活动作业处理器
*
异步
完成调用活动作业处理器
*
异步
结束执行的作业处
flowable
入门
、
flowable
现状、
flowable
开源产品、flw
oa
ble
入门
系列
、
flowable
课程、
flowable
与activiti区别
Flowable
是用
Java
编写的轻量级业务
流程
引擎。
Flowable
流程
引擎允许您部署
BPM
N 2.0
流程
定义(用于定义
流程
的行业XML标准),创建
流程
定义的
流程
实例,运行查询,访问活动或历史
流程
实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发机器上进行的实例进行实现。
flowable
入门
、
flowable
现状、
flowable
开源产品、flw
oa
ble
入门
系列
、
flowable
课程、
flowable
与activiti区别
Flowable
是用
Java
编写的轻量级业务
流程
引擎。
Flowable
流程
引擎允许您部署
BPM
N 2.0
流程
定义(用于定义
流程
的行业XML标准),创建
流程
定义的
流程
实例,运行查询,访问活动或历史
流程
实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发
机器上进行的实例进行实现。
flowable
相比activity,增加了一个新的特性,即
异步
处理历史数据。
我们在操作
流程
的过程中都会保存历史数据到不同的历史表中,如果
流程
数量很多的情况下,同步保存历史数据便会带来一定的性能压力。
flowable
给我们提供了一种
异步
处理的方法,其中这种方式的原理其实就是开启历史定时器,然后定期轮训历史作业,然后解析并将其插入到不同的历史表。
这种方式本质还是使用的线程池以...
17 高级用例
The following sections cover advanced use cases of
Flowable
, that go beyond typical execution of
BPM
N 2.0 processes. As such, a certain proficiency and experience with
Flowable
is advised to understand the topics described here.
下面几节介绍了
Flowable
的高级用
流程
定义更新信息,包含
流程
定义ID,版本号,内容等
1.1 ACT_RE_*
’RE’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,
流程
定义,
流程
的资源(图片,规则等)
1.1.1 act_re_deployment:部署信息表核心...
flowable
入门
、
flowable
现状、
flowable
开源产品、flw
oa
ble
入门
系列
、
flowable
课程、
flowable
与activiti区别
Flowable
是用
Java
编写的轻量级业务
流程
引擎。
Flowable
流程
引擎允许您部署
BPM
N 2.0
流程
定义(用于定义
流程
的行业XML标准),创建
流程
定义的
流程
实例,运行查询,访问活动或历史
流程
实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发
机器上进行的实例进行实现。
# ===================================================================
# Common
Flowable
Spring Boot Properties
# 通用
Flowable
Spring Boot参数
# This sample file is provided as a guideline. Do NOT copy it in its
# entirety to your own application. .
flowable
入门
、
flowable
现状、
flowable
开源产品、flw
oa
ble
入门
系列
、
flowable
课程、
flowable
与activiti区别
Flowable
是用
Java
编写的轻量级业务
流程
引擎。
Flowable
流程
引擎允许您部署
BPM
N 2.0
流程
定义(用于定义
流程
的行业XML标准),创建
流程
定义的
流程
实例,运行查询,访问活动或历史
流程
实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发
机器上进行的实例进行实现。