假设我有一个工作流程:
当我这样做时:
workflow.makeOrder();
这将阻止,所以直到步骤1-4完成后我才能得到结果。
但是,如果我不这样做:
WorkflowExecution workflowExecution = WorkflowClient.start(workflow::makeOrder);
workflowExecution.getWorkflowId()
我无法获得步骤1的结果。如何实现?
答案 0 :(得分:1)
我们目前(2019年夏季)致力于在工作流程代码中添加直接支持以同步等待特定条件的支持。我们相信,它将在2019年第三季度投入生产。
在此之前,最简单的解决方案是使用查询功能返回工作流状态。有关示例,请参见HelloQuery。此解决方案的主要缺点是客户端必须轮询工作流,直到状态更新以反映步骤1的结果为止。
如果需要确保响应的低延迟,建议的对工作流实例执行请求/答复的模式是:
CompletableFuture
并使用requestId作为键将其插入到地图中。然后,请求线程在此Future.get
上阻塞。 CompletableFuture
中获取原始请求线程被阻塞的状态,并以接收到的请求结果作为另一个活动参数来完成该请求。