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

Camunda失败任务与流程排查及Java API查询失败相关问题咨询

1. 如何在Camunda中查找失败的任务与失败的流程?

失败任务查找

  • Camunda UI方式:在任务列表页面,通过筛选器勾选「Failed」状态,或直接搜索任务的异常信息;若任务因异步作业失败,可在「Job」页面筛选「Failed Jobs」关联对应任务。
  • Java API方式:使用TaskService的查询API结合failed()条件过滤:
    List<Task> failedTasks = taskService.createTaskQuery()
        .failed()
        .list();
    
    关联异步作业失败的任务,可通过RuntimeService查询失败作业:
    List<Job> failedJobs = runtimeService.createJobQuery()
        .withException()
        .list();
    

失败流程查找

  • Camunda UI方式:在「Process Instances」页面筛选「Failed」状态的流程实例,或在「History」页面查询已结束的失败流程。
  • Java API方式:通过RuntimeService查询运行中失败的流程,或HistoryService查询历史失败流程:
    // 运行中失败的流程实例
    List<ProcessInstance> failedProcessInstances = runtimeService.createProcessInstanceQuery()
        .withIncident()
        .list();
    
    // 历史失败流程实例
    List<HistoricProcessInstance> historicFailedProcesses = historyService.createHistoricProcessInstanceQuery()
        .processInstanceStatus("FAILED")
        .list();
    
2. 使用Java API查询特定用户的任务或流程时,可能因哪些原因导致查询失败?
  • 权限配置问题:用户未被分配对应任务的权限(如未设为任务负责人、候选人,或未加入候选组),Camunda权限控制拦截查询。
  • 查询条件错误:用户ID拼写错误、参数误用(如混淆assignee()和candidateUser()),或未正确关联用户与任务的关系。
  • API服务调用错误:误用服务类(如用RuntimeService查询历史任务,需用HistoryService),或调用了不存在的查询方法。
  • 数据状态不匹配:目标任务/流程已被删除、归档到历史表(运行时查询无法获取),或任务已完成/流程已结束但未使用历史查询API。
  • 数据库连接异常:Camunda应用与数据库连接中断,导致查询无法执行。
  • 无用户关联关系:目标任务/流程未设置负责人、候选人或候选组,无法通过用户维度查询到。
3. Camunda历史服务中是否存在适配该查询场景的方法?若存在,具体为哪些方法?

存在,HistoryService提供以下适配方法:

历史失败任务查询

  • createHistoricTaskInstanceQuery():结合failed()筛选失败任务,可叠加用户维度条件:
    List<HistoricTaskInstance> userFailedTasks = historyService.createHistoricTaskInstanceQuery()
        .failed()
        .assignee("userId")
        .list();
    
    支持通过exceptionMessage()、exceptionStacktrace()过滤特定异常任务。

历史失败流程实例查询

  • createHistoricProcessInstanceQuery():通过processInstanceStatus("FAILED")筛选失败流程,可关联用户维度:
    List<HistoricProcessInstance> userFailedProcesses = historyService.createHistoricProcessInstanceQuery()
        .processInstanceStatus("FAILED")
        .startedBy("userId")
        .list();
    
    支持withIncident()查询包含异常事件的历史流程。

失败作业日志查询

  • createHistoricJobLogQuery():查询历史失败作业日志,可关联任务/流程并结合用户维度:
    List<HistoricJobLog> userFailedJobLogs = historyService.createHistoricJobLogQuery()
        .failed()
        .taskAssignee("userId")
        .list();
    
4. 如何获取这些失败任务、流程的相关数据?

失败任务数据获取

  • 查询任务实例后直接提取核心字段,或获取关联变量:
    for (HistoricTaskInstance task : userFailedTasks) {
        String taskId = task.getId();
        String exceptionMsg = task.getExceptionMessage();
        // 获取任务关联变量
        Map<String, Object> variables = historyService.getHistoricTaskInstanceVariables(taskId);
    }
    
    异常堆栈信息可通过HistoricJobLog获取:
    String stacktrace = historyService.createHistoricJobLogQuery()
        .taskId(taskId)
        .failed()
        .singleResult()
        .getExceptionStacktrace();
    

失败流程数据获取

  • 查询流程实例后提取流程信息,或获取全局变量:
    for (HistoricProcessInstance process : userFailedProcesses) {
        String processInstanceId = process.getId();
        String exceptionMsg = process.getExceptionMessage();
        // 获取流程全局变量
        Map<String, Object> processVariables = historyService.getHistoricProcessInstanceVariables(processInstanceId);
    }
    

批量统计与导出

  • 使用count()获取失败任务/流程数量,或转换为DTO输出:
    long failedTaskCount = historyService.createHistoricTaskInstanceQuery()
        .failed()
        .assignee("userId")
        .count();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:22:14