GlobalPartitioner 分区器会将上游所有元素都发送到下游的第一个算子实例上(SubTask Id = 0)
时间: 2024-05-20 12:11:23 浏览: 10
这个说法不完全准确。GlobalPartitioner 确实会将上游所有元素都发送到下游的第一个算子实例上,但这个算子实例的 SubTask Id 不一定是 0。具体来说,GlobalPartitioner 的分区逻辑是根据下游算子的并行度来进行分区的。假设下游算子并行度为 n,那么 GlobalPartitioner 会将所有数据按照某种规则划分成 n 个分区,然后将第 i 个分区的数据发送到下游的第 i 个算子实例上,这个算子实例的 SubTask Id 为 i-1。因此,如果下游算子并行度为 1,那么 GlobalPartitioner 就会将所有数据都发送到下游的第一个算子实例上,这个算子实例的 SubTask Id 确实为 0。但如果下游算子并行度大于 1,那么 GlobalPartitioner 就会将数据发送到多个算子实例上,它们的 SubTask Id 分别为 0 到 n-1。
相关问题
flowable 多实例串行 判断还有几个审批人
在Flowable中,可以使用`Execution`和`Task`两个类来判断多实例串行节点还有几个审批人。
对于`Execution`对象,可以通过以下方法来获取当前多实例节点中还有几个审批人:
```Java
// 获取当前执行实例的所有子执行实例
List<Execution> childExecutions = runtimeService.createExecutionQuery()
.parentId(executionId)
.list();
int remainingInstances = 0;
// 遍历所有子执行实例
for (Execution childExecution : childExecutions) {
// 如果子执行实例还没有完成,则数量加1
if (!childExecution.isEnded()) {
remainingInstances++;
}
}
System.out.println("还有 " + remainingInstances + " 个审批人需要审批");
```
对于`Task`对象,可以通过以下方法来获取当前多实例任务中还有几个审批人:
```Java
// 获取当前任务的所有子任务
List<Task> subTasks = taskService.createTaskQuery()
.parentTaskId(taskId)
.list();
int remainingInstances = 0;
// 遍历所有子任务
for (Task subTask : subTasks) {
// 如果子任务还没有完成,则数量加1
if (!subTask.isCompleted()) {
remainingInstances++;
}
}
System.out.println("还有 " + remainingInstances + " 个审批人需要审批");
```
需要注意的是,以上代码只是判断多实例串行节点还有几个审批人的一种方式,具体实现还需要根据业务需求进行调整。
flowable 多实例并行 判断还有几个审批人
在Flowable中,可以使用`Execution`和`Task`两个类来判断多实例并行节点还有几个审批人。
对于`Execution`对象,可以通过以下方法来获取当前多实例节点中还有几个审批人:
```Java
// 获取当前执行实例的所有子执行实例
List<Execution> childExecutions = runtimeService.createExecutionQuery()
.parentId(executionId)
.list();
int remainingInstances = 0;
// 遍历所有子执行实例
for (Execution childExecution : childExecutions) {
// 如果子执行实例还没有完成,则数量加1
if (!childExecution.isEnded()) {
remainingInstances++;
}
}
System.out.println("还有 " + remainingInstances + " 个审批人需要审批");
```
对于`Task`对象,可以通过以下方法来获取当前多实例任务中还有几个审批人:
```Java
// 获取当前任务的所有子任务
List<Task> subTasks = taskService.createTaskQuery()
.parentTaskId(taskId)
.list();
int remainingInstances = subTasks.size();
// 遍历所有子任务
for (Task subTask : subTasks) {
// 如果子任务已经完成,则数量减1
if (subTask.isCompleted()) {
remainingInstances--;
}
}
System.out.println("还有 " + remainingInstances + " 个审批人需要审批");
```
需要注意的是,以上代码只是判断多实例并行节点还有几个审批人的一种方式,具体实现还需要根据业务需求进行调整。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![crx](https://img-home.csdnimg.cn/images/20210720083646.png)