!188 【修复】发送oa消息通知,线程池资源在while循环中未能释放,导致服务器cpu占用过高

Merge pull request !188 from 东风/oa-fix-high-cpu
This commit is contained in:
风如歌 2024-12-24 08:26:20 +00:00 committed by Gitee
commit d58f2d0eaf
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

View File

@ -2,6 +2,7 @@ package org.dromara.oa.core.provider.service;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.dromara.oa.api.OaCallBack; import org.dromara.oa.api.OaCallBack;
import org.dromara.oa.api.OaSender; import org.dromara.oa.api.OaSender;
import org.dromara.oa.comm.config.OaSupplierConfig; import org.dromara.oa.comm.config.OaSupplierConfig;
@ -19,6 +20,7 @@ import java.util.concurrent.PriorityBlockingQueue;
* @author dongfeng * @author dongfeng
* 2023-10-22 21:03 * 2023-10-22 21:03
*/ */
@Slf4j
public abstract class AbstractOaBlend<C extends OaSupplierConfig> implements OaSender { public abstract class AbstractOaBlend<C extends OaSupplierConfig> implements OaSender {
@Getter @Getter
@ -57,12 +59,16 @@ public abstract class AbstractOaBlend<C extends OaSupplierConfig> implements OaS
pool.execute(() -> { pool.execute(() -> {
Thread.currentThread().setName("oa-priorityQueueMap-thread"); Thread.currentThread().setName("oa-priorityQueueMap-thread");
while (!Thread.currentThread().isInterrupted()) { while (!Thread.currentThread().isInterrupted()) {
Request request = priorityQueueMap.poll(); try{
if (!Objects.isNull(request)) { Request request = priorityQueueMap.take() ;
pool.execute(() -> { pool.execute(() -> {
System.out.println("优先级为"+request.getPriority()+"已发送"); log.info("优先级为"+request.getPriority()+"已发送");
sender(request, request.getMessageType()); sender(request, request.getMessageType());
}); });
}catch (InterruptedException e){
log.info("[Dispatcher]-priorityQueueMap-task-dispatcher has been interrupt to close.");
Thread.currentThread().interrupt();
break;
} }
} }
}); });