Java 长时间运行的activiti服务任务

Java 长时间运行的activiti服务任务,java,activiti,Java,Activiti,我们在activiti流程中有许多自动化任务,需要花费大量时间才能完成。与对外部系统的REST调用或JMS消息发送和接收响应类似 我可以使用两个选项来完成此操作: 服务异步任务 发送-接收任务:在这里,我们可以有一个任务,它将调用外部程序,相关id作为执行id,并移动到下一步,这将是一个接收任务。一旦我们从外部系统得到响应,我们就可以向过程发送信号 是否有人可以在activiti中验证处理此问题的正确方法或更好的方法。如果您可以控制接收方服务,还可以使用中间消息事件暂停执行,并让外部(长期运行)

我们在activiti流程中有许多自动化任务,需要花费大量时间才能完成。与对外部系统的REST调用或JMS消息发送和接收响应类似

我可以使用两个选项来完成此操作:

  • 服务异步任务
  • 发送-接收任务:在这里,我们可以有一个任务,它将调用外部程序,相关id作为执行id,并移动到下一步,这将是一个接收任务。一旦我们从外部系统得到响应,我们就可以向过程发送信号

  • 是否有人可以在activiti中验证处理此问题的正确方法或更好的方法。

    如果您可以控制接收方服务,还可以使用中间消息事件暂停执行,并让外部(长期运行)服务通过注入消息来释放流程

    你的两种方法各有优缺点

    服务异步任务-我假设您建议将“暂停”逻辑保留在服务任务中,并在外部服务返回之前简单地阻塞任务。虽然这更整洁,并将逻辑保留在服务任务实现中,但它不允许边界计时器事件或其他BPMN错误/超时处理在服务超时时移动进程。当然,你可以抛出一个BPMNError,它会冒泡,但它会使实际逻辑更难遵循

    发送-接收任务-这假设您可以控制外部服务,因为它与我提到的使用中间消息事件的第三个选项非常相似。我倾向于选择这种方法,因为逻辑是明确和明显的。但是,这确实意味着您必须能够让外部服务“发送”某些内容回接收任务,以推进流程

    无论哪种方式,这两种选择都有自己的位置,在很大程度上取决于外部服务的性质


    希望这有帮助

    如果您可以控制接收方服务,还可以使用中间消息事件暂停执行,并让外部(长时间运行)服务通过注入消息来释放流程

    你的两种方法各有优缺点

    服务异步任务-我假设您建议将“暂停”逻辑保留在服务任务中,并在外部服务返回之前简单地阻塞任务。虽然这更整洁,并将逻辑保留在服务任务实现中,但它不允许边界计时器事件或其他BPMN错误/超时处理在服务超时时移动进程。当然,你可以抛出一个BPMNError,它会冒泡,但它会使实际逻辑更难遵循

    发送-接收任务-这假设您可以控制外部服务,因为它与我提到的使用中间消息事件的第三个选项非常相似。我倾向于选择这种方法,因为逻辑是明确和明显的。但是,这确实意味着您必须能够让外部服务“发送”某些内容回接收任务,以推进流程

    无论哪种方式,这两种选择都有自己的位置,在很大程度上取决于外部服务的性质


    希望这有帮助

    谢谢你的洞察力。服务异步任务是activiti使用作业执行器支持的任务。但正如你所说,我不能在这方面有超时支持。我倾向于选项2,但也在评估中间捕获事件。我们可以在中间捕获事件上设置边界事件吗?不幸的是,据我所知,中间“捕获”事件不支持边界计时器。但是,如果您将catch事件放在子进程中,则可以将边界计时器添加到子进程中。感谢您的深入了解。服务异步任务是activiti使用作业执行器支持的任务。但正如你所说,我不能在这方面有超时支持。我倾向于选项2,但也在评估中间捕获事件。我们可以在中间捕获事件上设置边界事件吗?不幸的是,据我所知,中间“捕获”事件不支持边界计时器。但是,如果将catch事件放在子进程内,则可以将边界计时器添加到子进程中。