You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Client SDK重置失败的Cadence工作流

使用Cadence Java Client 3.5.0重置失败工作流的步骤

核心逻辑

你的场景里第一个Activity已经成功完成,只需把工作流重置到第二个Activity执行前的检查点,就能跳过已完成的步骤,直接从修复后的第二个Activity开始执行,完成后续流程。

具体操作步骤

1. 获取失败工作流的执行信息

先拿到目标失败工作流的WorkflowExecution(包含工作流ID和运行ID),可以通过Java客户端查询:

WorkflowServiceTChannel client = new WorkflowServiceTChannel("你的Cadence域名");
ListWorkflowExecutionsRequest request = new ListWorkflowExecutionsRequest()
    .setDomain("你的Cadence域名")
    .setQuery("WorkflowType='你的工作流类型名' AND ExecutionStatus='FAILED'");
ListWorkflowExecutionsResponse response = client.ListWorkflowExecutions(request);
// 从返回结果中定位到目标失败工作流的WorkflowExecution
WorkflowExecution failedExecution = ...;

2. 定位重置的目标事件ID

需要找到第一个Activity完成后的下一个事件ID,作为重置的起点:

GetWorkflowExecutionHistoryRequest historyReq = new GetWorkflowExecutionHistoryRequest()
    .setDomain("你的Cadence域名")
    .setExecution(failedExecution)
    .setReverseOrder(false);
GetWorkflowExecutionHistoryResponse historyResp = client.GetWorkflowExecutionHistory(historyReq);

long resetEventId = 0;
for (HistoryEvent event : historyResp.getHistory().getEventsList()) {
    // 匹配第一个Activity完成的事件
    if (event.getEventType() == EventType.EVENT_TYPE_ACTIVITY_TASK_COMPLETED) {
        ActivityTaskCompletedEventAttributes attrs = event.getActivityTaskCompletedEventAttributes();
        if ("第一个Activity的ID".equals(attrs.getActivityId())) {
            // 重置点设为该事件的下一个ID
            resetEventId = event.getEventId() + 1;
            break;
        }
    }
}

3. 调用Reset API执行重置

通过WorkflowClient发起重置请求:

WorkflowClient workflowClient = WorkflowClient.newInstance("你的Cadence域名");
ResetWorkflowExecutionRequest resetReq = new ResetWorkflowExecutionRequest()
    .setDomain("你的Cadence域名")
    .setExecution(failedExecution)
    .setResetType(ResetType.RESET_TYPE_EVENT_ID)
    .setResetEventId(resetEventId)
    .setReason("修复第二个Activity问题后重置工作流");

ResetWorkflowExecutionResponse resetResp = workflowClient.resetWorkflowExecution(resetReq);
String newRunId = resetResp.getNewRunId();
System.out.println("工作流已重置,新运行ID:" + newRunId);

4. 验证重置结果

重置后会生成新的运行ID,你可以查询工作流状态确认后续执行情况:

WorkflowExecutionInfo execInfo = workflowClient.getWorkflowExecutionInfo(
    failedExecution.getWorkflowId(), 
    newRunId
);
System.out.println("重置后工作流状态:" + execInfo.getStatus());

注意事项

  • 务必确认resetEventId的准确性,避免重复执行已完成的Activity或跳过必要步骤
  • 重置后的工作流保留原工作流ID,但会生成新的运行ID
  • 若工作流涉及外部资源操作(如数据库写入),需确保操作是幂等的,避免重复执行引发问题

内容的提问来源于stack exchange,提问作者jackxu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:50:27