工作流引擎外部任务(External Tasks)

外部任务模式

从概念上讲,执行外部任务的流程可以分为三个步骤,如下图所示:

1、流程引擎:创建外部任务实例

2、外部工作者:获取并锁定外部任务

3、外部工作者和流程引擎:完整的外部任务实例

当流程引擎遇到配置为由外部处理的服务任务时,它将创建一个外部任务实例,并将其添加到外部任务列表中(步骤1)。任务实例接收一个主题,该主题标识要执行的工作的性质。在将来的某个时间,外部工作人员可能会获取并锁定一组特定主题的任务(步骤2)。为防止一个任务同时被多个工作人员获取,任务具有基于时间戳的锁,该锁在获取任务时设置。仅当锁到期时,其他工作人员才能再次获取任务。当外部工作人员完成所需的工作时,它可以向流程引擎发出信号,使其在服务任务完成后继续执行流程(步骤3)。

用户任务类比

外部任务在概念上与用户任务非常相似。首次尝试了解外部任务模式时,可以将其类似于用户任务来考虑:任务由流程引擎创建并添加到任务列表中。然后,流程引擎等待人类用户查询列表,声明任务并完成任务。外部任务相似:创建外部任务,然后将其添加到主题。然后,外部应用程序查询主题并锁定任务。锁定任务后,应用程序可以对其进行处理并完成它。

这种模式的本质是执行实际工作的实体独立于流程引擎,并通过轮询流程引擎的API来接收工作项。这具有以下好处:

1、跨越系统边界:外部工作人员无需与流程引擎在同一Java进程,同一机器,同一集群,甚至同一大陆上运行。所需要的就是它可以访问流程引擎的API(通过REST或Java)。由于轮询模式,工作人员不需要公开任何接口供流程引擎访问。

2、跨越技术边界:不需要使用Java来实现外部工作程序。相反,可以使用最适合执行工作项并可以用来访问流程引擎的API(通过REST或Java)的任何技术。

3、专业工人:外部工人不必是通用应用程序。每个外部任务实例都接收一个主题名称,该主题名称标识要执行的任务的性质。工作人员只能针对他们可以处理的主题轮询任务。

4、细粒度缩放:如果集中在服务任务处理上的工作量很大,则可以独立于流程引擎来扩展各个主题的外部工作人员的数量。

5、独立维护:可以独立于流程引擎维护工人,而不会中断操作。例如,如果某个特定主题的工作人员有停机时间(例如,由于更新),则不会对流程引擎产生直接影响。对于此类工作程序,外部任务的执行会正常降低:它们存储在外部任务列表中,直到外部工作程序恢复操作为止。

 技术支持:盘古BPM工作流平台

相关教程