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