开源利器推荐:美团动态线程池框架的接入分享及效果展示

前言

蛮早前有些过关于线程池的使用及参数的一些参考配置,有兴趣的可以翻看以前的博文,但终究无法解决线程池的动态监控和实时修改。
以前读过美团早期发布的动态线程池框架的思路相关文章,但想要独自实现不是一件容易的事。
去年,一款美团动态线程池的框架DynamicTp终于开源了,因此我有尝试使用一下,发现接入简单,侵入性也不强,支持的接入方式也多,总体还是很不错的。
我认为尤其适合中小企业SpringBoot应用接入,是一款线程池监控的利器。

介绍

DynamicTp官网:dynamictp.cn/

架构图

下面,我把一个非配置中心的接入案例分享给大家,配置中心接入方式大同小异。

正文

使用的是最新版本1.1.3

1、引入依赖

2、yml配置

核心配置就是图中红色说明的报警配置和线程池参数配置

这是紧接着上面的邮件告警配置,除了邮件方式还有其他很多方式,具体可参考官网,个人项目更推荐邮件方式,接入最简单。

3、测试

定义一个接口,使用Hutool提供的并发模拟工具类,这里先设置线程数200。

在service中注入一个线程池,默认名称regExecutor,和yml配置中定义的刚好对应上。

这个接口的逻辑很简单,就是模拟并发场景下使用线程池的效果。

4、效果

执行接口看下效果,发现一切正常,没有任何告警。
这是因为我们yml中配置的线程池参数可以承受测试时设置的200个线程数。

那么,我们把测试接口的线程数设置成500再看看。

执行后,可以看到,DynamicTp已经触发了告警,并且提示邮件发送成功。

我用的QQ邮箱,发现通知也收到了。

点开后,可以看到DynamicTp提供的详细的线程池监控告警通知。

可以看到,报警类型是reject,表示线程被拒绝,并且展示出了线程池参数的配置,以及拒绝策略,和拒绝的任务数量。
其中,拒绝任务数量达到了250个,计算一下我们配置的参数,核心8,最大50,队列容量200。
并发场景下,该配置实际最大容量确实是250,而我们测试传入的线程数是500,被拒绝250,刚好符合。
这样,我们根据被拒绝的任务数量,就可以动态调整参数,比如扩大队列容量,或者提高核心线程数的上限等等,甚至是调整拒绝策略为调用者线程继续执行。
这都要根据具体业务场景来区分,到底是IO密集型还是CPU密集型,关于这个可以参考我其他的博文。

总结

总之,DynamicTp的接入是很简单的,而且社区在不断完善,目前Gitee上能找到的关注度稍高的动态线程池框架其实就两个,只要学会使用一个就够用了,思想没有太多区别。
这个案例我并没有展示动态修改参数的效果,因为这种场景一般是分布式环境下接入比较适合,比如接入了nacos配置中心,那么DynamicTp也提供了对接方案。
想要文中的完整案例代码来测试效果的,可以自己下载哈。


喜欢的xdm,可以【点个赞】,【收藏一下】以备不时之需,更可以【关注下我】,本人持续输出干货,分享工作中的一些实践经验。

相关推荐
磊磊磊磊磊2 分钟前
用AI做了个排版工具,分享一下如何高效省钱地用AI!
前端·后端·react.js
❥ღ Komo·3 分钟前
K8s蓝绿发布实战:零停机部署秘籍
java·开发语言
小安同学iter8 分钟前
天机学堂-排行榜功能-day08(六)
java·redis·微服务·zset·排行榜·unlink·天机学堂
hgz071010 分钟前
Spring Boot Starter机制
java·spring boot·后端
daxiang1209220511 分钟前
Spring boot服务启动报错 java.lang.StackOverflowError 原因分析
java·spring boot·后端
我家领养了个白胖胖12 分钟前
极简集成大模型!Spring AI Alibaba ChatClient 快速上手指南
java·后端·ai编程
jiayong2312 分钟前
Markdown编辑完全指南
java·编辑器
他是龙55117 分钟前
第40天:JavaEE安全开发SpringBoot JWT身份鉴权与打包部署(JAR&WAR)
spring boot·安全·java-ee
heartbeat..30 分钟前
深入理解 Redisson:分布式锁原理、特性与生产级应用(Java 版)
java·分布式·线程·redisson·
一代明君Kevin学长33 分钟前
快速自定义一个带进度监控的文件资源类
java·前端·后端·python·文件上传·文件服务·文件流