Flowable入门系列文章62 - 异步延续

Posted 分享牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章62 - 异步延续相关的知识,希望对你有一定的参考价值。

Flowable以交易方式执行流程,可以根据需要进行配置。我们先看看Flowable如何正常地处理事务。如果触发Flowable(启动一个进程,完
成一个任务,发出执行信号),Flowable将在进程中前进,直到它在每个活动执行路径上达到等待状态。更具体地说,它通过进程图执行深度优先搜索,并在每个执行分支上达到等待状态时返回。等待状态是一个“稍后”执行的任务,这意味着Flowable会持续当前执行并等待再次触发。触发器可以来自外部来源,例如,如果我们有用户任务或接收消息任务,或者如果我们有定时器事件,则来自Flowable本身。

我们看到一个带有用户任务,服务任务和计时器事件的BPMN流程。完成用户任务和验证地址是同一个工作单元的一部分,所以它应该成功或失败。这意味着如果服务任务抛出一个异常,我们想要回滚当前事务,以便执行追踪到用户任务,用户任务仍然存在于数据库中。这也是Flowable的默认行为。在(1)应用程序或客户端线程完成任务。在同一个线程中,Flowable现在正在执行服务并前进,直到达到等待状态(在这种情况下为计时器事件(2))。然后它将控制权返回给调用者(3),可能会提交事务(如果它是由Flowable启动的话)。

在某些情况下,这不是我们想要的。有时我们需要对流程中的事务边界进行自定义控制,以便能够对逻辑工作单元进行范围。这是异步延续
发挥的地方。考虑以下过程(片段):

这一次,我们正在完成用户任务,生成发票,然后将该发票发送给客户。这次发票的生成不是同一工作单元的一部分,所以如果生成发票失败,我们不希望回滚用户任务的完成。我们想要Flowable做的是完成用户任务(1),提交事务并将控制返回给调用应用程序。然后我们想要在后台线程中异步生成发票。这个后台线程是Flowable作业执行器(实际上是一个线程池),它定期轮询数据库的作业。在幕后,当我们到达“生成发票”任务时,我们正在为Flowable创建一个工作“消息”,以便稍后继续处理并将其保存到数据库中。这份工作然后由工作执行者拿起并执行。我们也给当地的工作执行者一点提示,有一个新的工作,以提高业绩。

为了使用这个特性,我们可以使用flowable:async =“true”扩展名。所以,例如,服务任务如下所示:

<serviceTask id="service1" name="Generate Invoice"
flowable:class="my.custom.Delegate"
flowable:async="true" />

可以在以下BPMN任务类型中指定async:task,serviceTask,scriptTask,businessRuleTask,sendTask,receiveTask,userTask,subProcess,callActivity。

在userTask,receiveTask或其他等待状态下,异步延续允许我们在单独的线程/事务中执行启动执行侦听器。

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:

以上是关于Flowable入门系列文章62 - 异步延续的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章9 - 基本配置三

Flowable入门系列文章63 - 失败重试

Flowable入门系列文章23 - 基本的Flowable概念四

Flowable入门系列文章71 - JPA用法

Flowable入门系列文章98 - 流程定义

Flowable入门系列文章97 - 获取流程定义