Apache Activiti 工作流执行作为一个单独的进程或在 Activiti 进程中发生
Apache Activiti Workflow Execution happens as a separate process or within the Activiti Process
我一直在为我们的一个工作流用例调查 Azkaban 和 Apache Activiti。我的理解是,Azkaban 运行s 中的每个作业作为一个单独的进程,与 Activiti 相同,或者在 Activiti 的主进程中作为单独的线程执行 Activiti 任务 运行。
Activiti 任务 运行 在主引擎 运行ning 的同一进程中。
根据您的流程中是否存在异步活动,它们将 运行 在您调用其中一个 API 时使用的同一线程中或由后台线程池使用。
也就是说,没有什么能阻止您 运行 在单独的流程中执行工作流的特定步骤(例如:长时间的 运行 批处理)。这可以通过多种方式实现,但我喜欢的一种是将任务建模为 "human tasks",然后使用外部调度程序使用 Activiti 的 API(REST 或 Java)选择这些任务实际执行。这种方法具有很强的可扩展性,并且可以避免一些与事务管理相关的陷阱,如果您的任务太复杂,可能会出现这些陷阱 and/or 需要很长时间才能执行。
如果 Activiti 引擎嵌入到您的应用程序中,则调用引擎 API 的线程中的任务 运行(可以是服务任务或用户任务)。但我从你的问题中了解到,也许你对使用 REST API 调用 Activiti 引擎 remotely 感兴趣,在这种情况下,显然任务 运行 作为托管 Activiti 引擎的容器中的不同线程。
我一直在为我们的一个工作流用例调查 Azkaban 和 Apache Activiti。我的理解是,Azkaban 运行s 中的每个作业作为一个单独的进程,与 Activiti 相同,或者在 Activiti 的主进程中作为单独的线程执行 Activiti 任务 运行。
Activiti 任务 运行 在主引擎 运行ning 的同一进程中。
根据您的流程中是否存在异步活动,它们将 运行 在您调用其中一个 API 时使用的同一线程中或由后台线程池使用。
也就是说,没有什么能阻止您 运行 在单独的流程中执行工作流的特定步骤(例如:长时间的 运行 批处理)。这可以通过多种方式实现,但我喜欢的一种是将任务建模为 "human tasks",然后使用外部调度程序使用 Activiti 的 API(REST 或 Java)选择这些任务实际执行。这种方法具有很强的可扩展性,并且可以避免一些与事务管理相关的陷阱,如果您的任务太复杂,可能会出现这些陷阱 and/or 需要很长时间才能执行。
如果 Activiti 引擎嵌入到您的应用程序中,则调用引擎 API 的线程中的任务 运行(可以是服务任务或用户任务)。但我从你的问题中了解到,也许你对使用 REST API 调用 Activiti 引擎 remotely 感兴趣,在这种情况下,显然任务 运行 作为托管 Activiti 引擎的容器中的不同线程。