栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java线程池动态配置(nacos)+实时监控 落地解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java线程池动态配置(nacos)+实时监控 落地解决

我们公司开发的一个线程池框架,基于JDK原生的线程池,名为HThreadPool ,优点如下:

通过 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-starter
			0.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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704553.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号