多实例 Activiti 6 设置中的作业取消

Job cancellation in multi instance Activiti 6 setup

我有一个服务,它可以启动一个 Activiti 实例,并帮助进行作业管理。出于可扩展性需求,我计划分拆该服务的多个实例。这意味着 Activit 6 引擎的多个实例,位于负载均衡器之后。所有这些最终都连接到同一个数据库。

作业取消在单个实例设置中工作得很好。但是,当我有多个 Activiti 实例时,取消不能可靠地工作。进一步解释,如果 Activiti 实例 #1 启动了作业 #1 和 #2,而实例 #2 启动了 #3 和 #4。作业 #1 的取消请求如果发送到 Activiti #1 会正常工作,但如果该请求转到 #2,作业取消将不起作用。

我完成这项工作的一种方法是将每个取消请求广播到每个 Activiti 实例。另一个是让我在外部簿记与每项工作相关的实例。这两个看起来都不干净。

我的问题 - 处理此类情况的最佳做法是什么?有没有可以遵循的推荐模式?

提前致谢。

显然,对于单个引擎实例,这里的正确答案是使用信号或消息事件处理程序,但这不适用于您所说的多个引擎实例。 广播选项可能是最简单的,如果实例不在消息有意义的进程的一部分,它将被忽略。 更简洁但更复杂的解决方案是将此处理外部化到应用程序 table 或什至像文件系统上的文件一样简单的东西。实例会查找 "flag" 并退出,但是您需要确保在最后一个实例退出时清除该标志。 无论哪种方式,我都想不出引擎内部有什么可以满足您的需求。