diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java index ef594a474..565af1d35 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java @@ -161,4 +161,9 @@ public interface BpmnConstants { * 审批人数量限制 */ Integer ASSIGNER_LIMIT_NUMBER = 60; + + /** + * 抄送MQ消息每批次人员数量 + */ + Integer CARBON_ASSIGNER_BATCH_SIZE = 20; } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineCarbonCopyEventListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineCarbonCopyEventListener.java index c9f26d948..52050f161 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineCarbonCopyEventListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineCarbonCopyEventListener.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; +import static cn.axzo.workflow.common.constant.BpmnConstants.CARBON_ASSIGNER_BATCH_SIZE; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getCarbonCopyConfigs; @@ -107,11 +108,17 @@ public class EngineCarbonCopyEventListener implements JavaDelegate { } return conf; }).orElse(null); - - MessagePushEventImpl event = MessagePushEventBuilder.createEvent(MessagePushEventType.CARBON_COPY, - carbonUsers, bpmnNoticeConf, execution.getProcessInstanceId(), - execution.getTenantId(), getCarbonTaskId(execution)); - eventDispatcher.dispatchEvent(event, processEngineConfiguration.getEngineCfgKey()); + //按人员批次发送消息 + int startIndex = 0, endIndex = Integer.min(startIndex + CARBON_ASSIGNER_BATCH_SIZE, carbonUsers.size()); + do { + List bpmnTaskDelegateAssigners = carbonUsers.subList(startIndex, endIndex); + MessagePushEventImpl event = MessagePushEventBuilder.createEvent(MessagePushEventType.CARBON_COPY, + bpmnTaskDelegateAssigners, bpmnNoticeConf, execution.getProcessInstanceId(), + execution.getTenantId(), getCarbonTaskId(execution)); + eventDispatcher.dispatchEvent(event, processEngineConfiguration.getEngineCfgKey()); + startIndex = endIndex; + endIndex = Integer.min(endIndex + CARBON_ASSIGNER_BATCH_SIZE, carbonUsers.size()); + } while (startIndex < carbonUsers.size()); } private String getCarbonTaskId(DelegateExecution execution) {