动态线程池 DynamicTp v1.1.2 版本发布


DynamicTp 简介

DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。

经过多个版本的迭代,目前最新版本 v1.1.2 具有以下特性

  • 代码零侵入:我们改变了线程池以往的使用姿势,所有配置均放在配置中心,服务启动时会从配置中心拉取配置生成线程池对象放到 Spring 容器中,使用时直接从 Spring 容器中获取,对业务代码零侵入

  • 通知告警:提供多种报警维度(配置变更通知、活性报警、容量阈值报警、拒绝触发报警、任务执行或等待超时报警),已支持企业微信、钉钉、飞书、邮件报警,同时提供 SPI 接口可自定义扩展实现

  • 运行监控:定时采集线程池指标数据,支持通过 MicroMeter、JsonLog 日志输出、Endpoint 三种方式,可通过 SPI 接口自定义扩展实现

  • 任务增强:提供任务包装功能,实现 TaskWrapper 接口即可,如 MdcTaskWrapper、TtlTaskWrapper、SwTraceTaskWrapper,可以支持线程池上下文信息传递

  • 多配置中心支持:基于主流配置中心实现线程池参数动态调整,实时生效,已支持 Nacos、Apollo、Zookeeper、Consul、Etcd、Polaris、ServiceComb,同时也提供 SPI 接口可自定义扩展实现

  • 中间件线程池管理:集成管理常用第三方组件的线程池,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc、RabbitMq 等组件的线程池管理(调参、监控报警)

  • 轻量简单:基于 SpringBoot 实现,引入 starter,接入只需简单 4 步就可完成,顺利 3 分钟搞定

  • 多模式:参考 Tomcat 线程池提供了 IO 密集型场景使用的 EagerDtpExecutor 线程池

  • 兼容性:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 也可以被框架监控,@Bean 定义时加 @DynamicTp 注解即可

  • 可靠性:框架提供的线程池实现 Spring 生命周期方法,可以在 Spring 容器关闭前尽可能多的处理队列中的任务

  • 高可扩展:框架核心功能都提供 SPI 接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)

  • 线上大规模应用:参考美团线程池实践,美团内部已经有该理论成熟的应用经验

技术架构

v1.1.2 发布记录

Feature

  • 增加对 juc 线程池的动态调参能力,感谢@wenpan 的贡献

  • 增加 ScheduledDtpExecutor,感谢@WindSearcher 的贡献

  • 增加 spring-cloud-tencent 配置中心 polaris 的支持,感谢@fabian4 的贡献

  • 增加对 rocketmq producer 线程池的管理,感谢@fabian4 的贡献

  • 增加对 rabbitmq 消费线程池的管理,感谢@fabian4 的贡献

  • 任务执行超时、拒绝等场景下日志输出 & 告警信息里添加打印 tid,感谢@kyao 的贡献

  • 增加 spring-cloud-huawei 配置中心 servicecomb 的支持,感谢@WindSearcher 的贡献

  • platfrom 新增 id 字段,可以配置多个通知平台,根据配置推送相应报警群,感谢@KamToHung 的贡献

  • StreamRocketMqDtpAdapter 增加对 producer 线程池的管理,感谢@hailang 的贡献

Bugfix

  • 修复 alibaba dubbo 初始化错误赋值的 bug,感谢@WindSearcher 的贡献

  • 修复 webserver undertow 高低版本不兼容问题,感谢@WindSearcher 的贡献

  • 修复 DtpPostProcessor 类中 AnnotatedBeanDefinition 强制转换失败问题,感谢@文攀锋的贡献

Optimize

  • jackson-databind 版本升级

  • hutool 版本升级 5.8.12

  • 优化在 JDK8 下, corePoolSize 为 0 时, ScheduledThreadPoolExecutor 会导致死循环问题,感谢@WindSearcher 的贡献

  • 优化获取本机 ip 地址的方式,感谢@yaokai 的贡献

  • 优化 submit 提交的任务执行异常时,无法被 UncaughtExceptionHandler 处理,感谢@dailingx 的贡献

  • 优化只有打开 dynamicTP 开关才加载第三方 adapter 类,感谢@hkhuang 的贡献

  • 启动优化,启动时只通过@EnableDynamicTp 决定是否使用 dtp,感谢@KamToHung 的贡献

  • 日志输出优化

  • 部分代码优化重构

项目地址

官网:https://dynamictp.cn

gitee 地址:https://gitee.com/dromara/dynamic-tp

github 地址:https://github.com/dromara/dynamic-tp

加入社群

看到这儿,方便的话给项目一个 star,你的支持是我们前进的动力!

使用过程中有任何问题,或者对项目有什么想法或者建议,可以加入社群,跟群友一起交流讨论。

微信群已满 200 人,可以加我个人微信 yanhom1314 拉群(备注:dynamic-tp)。


相關推薦

2023-02-09

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 经过多个版本的迭代,目前最新版本 v1.1.0 具有以下特性

2022-11-08

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 经过几个版本迭代,目前最新版本v1.0.9具有以下特性 特

2024-09-28

ues/IAPNE8   <dependency> <groupId>org.dromara.dynamictp</groupId> <artifactId>dynamic-tp-extension-agent</artifactId> <version>1.1.9</version> </dependency>   新增全局配置功能,减少配置量,项目中可能

2023-01-17

持了很多新的监控类型,MongoDB 数据库, ClickHouse 数据库 , DynamicTp线程池, RabbitMQ消息中间件, ActiveMQ消息中间件, Jetty AppServer. 修复若干BUG,完善了文档,重构了代码。快来体验下吧! 只需要一条docker命令即可安装体验heartbeat : dock

2023-09-28

dynamic-tp v1.1.4 已经发布,轻量级动态线程池 此版本更新内容包括: Feature 支持 Spring 项目,SpringBoot 相关特性只在 starter 模块引入,@炼龙 添加 jvmti 黑科技模块,方便集成管理各种三方包线程池,@炼龙 升级 VariableLinke

2023-01-04

定 线程池 则使用 统一的线程池配置 如果通过 API 的方式动态更新了线程池 则使用动态更新 替换配置文件线程池配置 参见: ThreadPoolConfig thread-pool: core-pool-size: 1000 max-pool-size: 2000 自定义规则配置 如果开发者针对流程规则做

2023-06-04

类型就不会生成相应的代码,编译时候就会警告。 修复动态时候少一次磁盘访问。 https://github.com/hggq/paozhu C++ web框架特性 ✅ 1. 自带JSON编解码不用第三方库,标准JSON支持 ✅ 2. 支持多域名网站 ✅ 3. 支持多域名ssl 服务端 ✅ 4

2022-08-19

缓存路径不存在时,不显示警告(#5747) [autodiff] 支持动态索引中的 shift ptr ( #5770 ) 更新公告:https://github.com/taichi-dev/taichi/releases/tag/v1.1.2

2022-10-16

。一行代码开发一个分布式爬虫,拥有"多线程、异步、IP动态代理、分布式、JS渲染"等特性; 特性 1、简洁:API直观简洁,可快速上手; 2、轻量级:底层实现仅强依赖jsoup,简洁高效; 3、模块化:模块化的结构

2022-12-25

生成二维码(qrcode),需要gd、qrencode库 ✅16. 插件化编程,热动态更新,使用动态库方式 https://github.com/hggq/paozhu  

2022-09-14

又发布了新的版本,新版本实现了两个非常重要的特性:动态配置和 Bean 共享。 动态配置 有时候我们想要在不停机的情况下可以修改程序的配置,更改程序的行为,即所谓的“动态配置”。Go-Spring 通过使用专门的数据类型实

2023-06-25

生成二维码(qrcode),需要gd、qrencode库 ✅16. 插件化编程,热动态更新,使用动态库方式 ✅17. 框架内置通用数据缓存模块,ORM结果缓存,提高并发能力 ✅18. 框架controller目录注解功能,方便添加URL路由映射,降低入门心智 ✅19. 结

2023-12-21

生成二维码(qrcode),需要gd、qrencode库 ✅16. 插件化编程,热动态更新,使用动态库方式 ✅17. 框架内置通用数据缓存模块,ORM结果缓存,提高并发能力 ✅18. 框架controller目录注解功能,方便添加URL路由映射,降低入门心智 ✅19. 结

2023-07-16

信息创建数据库表,可只创建部分 4. 支持 Spring boot 3.0, 动态配置 5. 完善 Sharding ThreadPool, 可以自定义配置 Sharding 操作执行线程数的大小 6. 完善 Android 多线程操作获取 SQLiteDatabase 的问题 使用实例: #1.解决缓存雪崩问题 #二级缓