【问题标题】:How do I get user task list with its process variables in Camunda如何在 Camunda 中获取用户任务列表及其流程变量
【发布时间】:2015-12-18 00:09:26
【问题描述】:

我有一个要求,可以在给定时间为用户分配数千个 (1000 - 5000) 个任务,这些任务属于不同的流程实例(1000 - 5000 个相同的用户任务)实例。我有一个自定义任务列表屏幕,我需要在其中加载所有任务及其基本信息(id、名称、流程实例 ID 等)以及每个任务的一些流程变量。

首先,我使用过滤器/列表 REST 服务,即 engine-rest/filter/{filter-id}/list 来获取带有流程变量的任务。 (我在 Camunda 任务列表中创建了一个过滤器)。但是,当有超过 1000 个有问题的流程实例时,此 REST 服务需要永远返回。大约 2000 个流程实例需要 7-8 分钟。可能是因为这个服务返回了很多我不需要的信息。

所以我决定使用 Camunda Java api 编写自己的 REST 服务。这就是我所做的-

List<Task> tasks = taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).taskAssignee(assignee).list();

 if(tasks != null && !tasks.isEmpty()){

 for(Task task : tasks){
 .....
 .....
 Map<String, Object> variables = taskService.getVariables(task.getId(), variableNames);
 .....
}}

这很有效,而且比过滤器服务快得多。但是对于大约 1000 个实例,它需要大约 25 秒。 (我的服务器现在不是生产级的,Tomcat Xms -1gb Xmx - 2gb)。

但我担心的是,这段代码在内部是否会命中 DB 1000 次(对于 taskquery 返回的每个任务)以获取变量?更糟糕的是,取决于变量的数量,它是否会为每个变量多次查询数据库?我的意思是对于 5 个变量,我们是否达到了 DB 5000 次?

1) 如果是这样,我有什么办法可以改进这项服务吗?就像我可以编写一个 NativeTaskQuery 来加入 act_ru_task、act_ru_process 和 act_ru_variable 表来获取我需要的数据吗?那是正确的方法吗? 2) Camunda 中没有任何内置缓存可以提供帮助吗?

提前感谢您的帮助。

【问题讨论】:

    标签: camunda


    【解决方案1】:

    您可以为此使用自定义查询。编写你的原生 sql 查询并添加一个 mybatis 映射。这个例子解释了这个概念:https://github.com/camunda-consulting/code/tree/master/snippets/custom-queries

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多