在挂起状态下启动camunda进程

Posted

技术标签:

【中文标题】在挂起状态下启动camunda进程【英文标题】:Start camunda process in the suspended state 【发布时间】:2017-01-30 12:04:34 【问题描述】:

在数据导入任务期间,我需要在一些“暂停”或暂停状态下启动多个 camunda 流程实例。该进程有一些计时器,这些计时器的值可以是过去的。因此,如果我正常启动这样的过程,它将立即开始执行某些任务,但我想以某种方式推迟执行(因为任务正在使用一些尚未导入的数据)。 所以,我想要这样的行为:

1) 以某种方式暂停 camunda 引擎、作业执行器或流程定义。

2) 导入所有需要的数据,同时启动所有需要的流程

3) 取消暂停 camunda,让它运行并执行之前启动的进程。

我尝试了以下解决方案:

1) 从 Cockpit 全局挂起流程定义。但是当我启动进程时,它会抛出异常,关于暂停的进程定义。 我使用以下代码开始流程:

runtimeService.createProcessInstanceByKey("process-key")
            .businessKey("some-business-key")
            .setVariables(vars)
            .startBeforeActivity("xxx")
            .execute();

2) 用相同的代码启动进程,并在同一个 tx 中挂起进程实例 runtimeService.suspendProcessInstanceById(processInstance.getProcessInstanceId()); 但我得到了一些例外和事件。

3) 在配置文件中全局禁用 camunda 作业执行器。工作正常,但每次修改配置和重启服务器不是很方便。

有没有更好的解决方案?

【问题讨论】:

您使用共享引擎还是嵌入式引擎?如果共享,哪个应用服务器? Camunda 安装为 wildfly10 的子模块。 【参考方案1】:

找到了一种在运行时控制作业执行器的方法。

    JobExecutor jobExecutor = ((ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration()).getJobExecutor();
    if (jobExecutor.isActive()) 
        jobExecutor.shutdown();
     else 
        jobExecutor.start();
    

【讨论】:

我认为这是一个很好的解决方案。根据使用情况,您可能必须同步对该代码的访问。在 JBoss/Wildfly 以外的服务器上,Camunda 提供 MBean 来启动/停止作业执行器。

以上是关于在挂起状态下启动camunda进程的主要内容,如果未能解决你的问题,请参考以下文章

MacOS 创建处于挂起状态的进程

已安排本地通知,但未在挂起和未运行模式下传递

NSURLSessionDownloadTask 在挂起时继续下载

使用 pthreads 在挂起模式下创建线程

所有 iOS 配置文件都停留在挂起 [关闭]

Angular Custom Async Validator 保持挂起状态