通过 nacos 可以动态修改线程池的参数,且实时生效。
通过提供http接口,来返回当前线程池的各项指标。
内部包装了JDK的ThreadPoolExecutor , 线程池功能都是原生的。
集成简单,只需引入一个starter, 然后配置nacos地址即可。
效果测试nacos上配置线程池参数:
启动程序,查看监控(通过提供http接口方式):
activeCount : 正在工作的线程数,当前0,因为我们还没提交任务。
corePoolSize: 核心线程数为5,因为我们nacos配置就是5。
maximumPoolSize: 最大线程5, 我们nacos配置就是5。
queueUsedSize : 队列里面挂起的任务数,目前为0。
我们向队列中提交6次任务, 任务里面是无限循环,在查看监控:
我们发现 activeCount 为 5 , 也就是说 有5个线程在工作了。
queueUsedSize 为1, 因为我们提交了6个任务,所以一个任务由于没有可用线程了,导致挂到队列里面。
此时,我们可以通过动态修改线程池的核心线程数和最大线程数来让它把挂起的任务给执行掉!修改nacos配置:
此时,我们的程序已经执行了第6个任务了,再次查看监控:
activeCount 变成了6 , queueUsedSize 变成了0 , 说明我们挂起的任务被自动执行了。
用法项目中引入maven:
com.h.threadpool h-threadpool-boot-starter0.0.1-SNAPSHOT
application.properties配置:
# 指定线程池的名称 hthreadpool.nam = 订单服务线程池 # 指定nacos配置地址 hthreadpool.config_host = 121.4.189.227:8848 # 指定nacos dataId hthreadpool.config_dataId = uc-order.yml # 指定 nacos group hthreadpool.config_groupId = DEFAULT_GROUP
提交任务:
@RestController
public class OrderController {
@Autowired
HThreadPoolExecutor threadPoolExecutor;
@GetMapping("/set")
public void set() {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
System.out.println("任务提交成功");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
监控中心
当启动你的微服后,会在当前机器上开启一个http端口,用来获取当前线程池的指标数据, 路径如下:
监控格式数据:
{
"activeCount":6,
"activeUsedPercent":"100%",
"corePoolSize":6,
"maximumPoolSize":6,
"queueRemainSize":1024,
"queueTotalSize":1024,
"queueUsedPercent":"0%",
"queueUsedSize":0,
"rejectedClass":"java.util.concurrent.ThreadPoolExecutor$AbortPolicy",
"taskCompletedSize":0
}
字段解释:
public class ThreadPoolNature {
private int queueTotalSize;
private int queueUsedSize;
private int queueRemainSize;
private String queueUsedPercent;
private long taskCompletedSize;
private int activeCount;
private int maximumPoolSize;
private int corePoolSize;
private String activeUsedPercent;
private String rejectedClass;
}
动态配置中心
可修改的配置指标有:
# 核心线程数 hthreadpool.corePoolSize: 6 # 最大线程数 hthreadpool.maximumPoolSize: 6 # 保活时间,单位毫秒 hthreadpool.keepAliveTime: 100 # 队列大小 hthreadpool.queueSize: 10 # 拒绝策略 hthreadpool.rejectedExecutionHandler: java.util.concurrent.ThreadPoolExecutor.AbortPolicy代码结构
分为三大核心:
配置中心
监控中心
线程池中心
源码我就不解析了,要代码的可以加我,qq:657455400 , wx:hadluo



