添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文为博主原创文章,未经博主允许不得转载。不允许将博客的内容(包含博客文章的文字、代码片段、图片、视频、评论、出现的名词、或者代码片段等)复制到gitee/github等网站形成GPL-3.0协议。如果上述项目中复制任何一段代码,该项目开源协议自动失效。不允许任何组织或者个人对文章进行拆解去申请软件著作权。违反该规定将追究法律责任。 本文链接: https://blog.csdn.net/qq_30739519/article/details/123657887

1、异步执行器设计

存在两种类型的作业:定时器(例如属于用户任务上的边界事件的定时器)和异步延续(属于具有流动性:异步=“真”属性的服务任务)。

定时器是最容易解释的:它们在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之前),用于所有作业类型/状态,这使一个表中的其中条件的大,因为它照顾到所有用例。现在这个问题已经解决,我们的基准已经证明这个新的设计提供了更好的性能,并且更具可扩展性。

2、异步执行器配置

异步执行程序是一个高度可配置的组件。总是建议查看异步执行程序的默认设置,并验证它们是否符合您的进程的要求。

或者,可以扩展默认实现,或者将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
了解更多文章可以关注微信公众号: 在这里插入图片描述

<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,通过您可以在自己的开发 机器上进行的实例进行实现。