我们在激活过程中有很多自动化任务,这需要大量时间才能完成。像对外部系统的REST调用或JMS消息发送和接收响应。
我可以使用两个选项:
有人可以验证在活动中处理此问题的正确方法或任何更好的方法。
如果您可以控制接收器服务,也可以使用中间消息事件来暂停执行,并通过注入消息使外部(长期运行)服务释放该过程。
您的两种方法各有优缺点
服务异步任务-我假设您打算将“暂停”逻辑保留在服务任务中,并只是阻塞该任务,直到外部服务恢复。尽管这比较整洁,并且将逻辑保留在服务任务实现中,但是如果服务超时,则不允许边界计时器事件或其他BPMN错误/超时处理继续进行该过程。当然,您可以抛出一个BPMNError,它将冒泡,但是这会使实际逻辑更难理解。
发送-接收任务-这假定您可以控制外部服务,因为它与我提到的使用中间消息事件的第三个选项非常相似。我倾向于采用这种方法,因为其逻辑清晰明了。但是,这确实意味着您必须具有外部服务的能力,才能将某些东西“发送”回接收任务以继续执行流程。
无论哪种方式,这两种选择都有其位置,并且在很大程度上取决于外部服务的性质。
希望这会有所帮助。