Releases: dromara/dynamic-tp
v1.2.2(May 27, 2025)
Feature
- adapter 模块新增对 thrift server 端线程池的管理,by@devin。
https://github.com/dromara/dynamic-tp/pull/570
Refactor
- 重构 adapter-hystrix 实现方式,by@devin。
https://github.com/dromara/dynamic-tp/pull/571
Optimize
- 告警发送优化,增加 http 代理配置
https://github.com/dromara/dynamic-tp/pull/560
- 支持 springboot 1.x 版本 tomcat 线程池管理
https://github.com/dromara/dynamic-tp/pull/573
- 优化 adapter 模块日志输出
Bugfix
- 修复当没有配置 platforms 字段,刷新时报 npe 问题。
https://github.com/dromara/dynamic-tp/pull/572
v1.2.1(Apr 26, 2025)
升级注意事项
- DtpEndpoint 端点名称修改
实时指标监控端点名称从 dynamic-tp
修改为 dynamictp
,消除 springboot 的非法字符 warn 警告。
- 告警规则重构
v1.2.1 之前版本里告警规则比较简单,通过 threshold
和 interval
字段来控制。
dynamictp:
# 全局配置
globalExecutorProps: # 线程池配置 > 全局配置 > 字段默认值
rejectedHandlerType: CallerRunsPolicy
queueType: VariableLinkedBlockingQueue
waitForTasksToCompleteOnShutdown: true
awaitTerminationSeconds: 3
taskWrapperNames: ["swTrace", "ttl", "mdc"]
queueTimeout: 300
runTimeout: 300
notifyItems: # 报警项,不配置自动会按默认值(查看源码NotifyItem类)配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- type: change
interval: 10
- type: capacity # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类
threshold: 80 # 报警阈值,默认70,意思是队列使用率达到70%告警
interval: 120 # 报警间隔(单位:s),默认120
- type: liveness # 线程池活性
threshold: 80 # 报警阈值,默认 70,意思是活性达到70%告警
interval: 120
- type: reject # 触发任务拒绝告警
threshold: 1 # 默认阈值10
interval: 120
- type: run_timeout # 任务执行超时告警
threshold: 100 # 默认阈值10
interval: 120
- type: queue_timeout # 任务排队超时告警
threshold: 100 # 默认阈值10
interval: 120
比如对于 capacity 项:语义为当线程池队列容量达到 80%时触发一次告警,告警后 120s 内再产生的报警保持静默。
设计的比较草率,有几个问题:
-
数据统计需要限定在一定的时间窗口内,过期需重新计数,此处 interval 只用在了静默处理上,没统计窗口的概念
-
只要阈值达到了就会产生一次报警,更好的做法应该是达到阈值的次数达到某个值才算一个异常,触发一次报警
-
无效告警多,静默不能关闭
在 v1.2.1 版本里,我们重构了告警规则,引入 threshold
、count
、period
、silencePeriod
四个配置字段。
目前的告警语义:对于某一个告警项,在一定的统计窗口(period)内,达到阈值(threshold)的次数达到某个值(count)时才算为一个有效的异常,触发一次报警。告警后(silencePeriod)内再产生的报警保持静默,且静默可以关闭。
dynamictp:
globalExecutorProps:
rejectedHandlerType: CallerRunsPolicy
queueType: VariableLinkedBlockingQueue
waitForTasksToCompleteOnShutdown: true
awaitTerminationSeconds: 3
taskWrapperNames: ["swTrace", "ttl", "mdc"]
queueTimeout: 300
runTimeout: 300
notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- type: change # 线程池核心参数变更通知
silencePeriod: 120 # 通知静默时间(单位:s),默认值1,0表示不静默
- type: capacity # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类
threshold: 80 # 报警阈值,意思是队列使用率达到70%告警;默认值=70
count: 2 # 在一个统计周期内,如果触发阈值的数量达到 count,则触发报警;默认值=1
period: 30 # 报警统计周期(单位:s),默认值=120
silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默,默认值=120
- type: liveness # 线程池活性
threshold: 80 # 报警阈值,意思是活性达到70%告警;默认值=70
count: 3 # 在一个统计周期内,如果触发阈值的数量达到 count,则触发报警;默认值=1
period: 30 # 报警统计周期(单位:s),默认值=120
silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默;默认值=120
- type: reject # 触发任务拒绝告警
count: 1 # 在一个统计周期内,如果触发拒绝策略次数达到 count,则触发报警;默认值=1
period: 30 # 报警统计周期(单位:s),默认值=120
silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默;默认值=120
- type: run_timeout # 任务执行超时告警
count: 20 # 在一个统计周期内,如果执行超时次数达到 count,则触发报警;默认值=10
period: 30 # 报警统计周期(单位:s),默认值=120
silencePeriod: 30 # 报警静默时间(单位:s),0表示不静默;默认值=120
- type: queue_timeout # 任务排队超时告警
count: 5 # 在一个统计周期内,如果排队超时次数达到 count,则触发报警;默认值=10
period: 30 # 报警统计周期(单位:s),默认值=120
silencePeriod: 0 # 报警静默时间(单位:s),0表示不静默;默认值=120
Feature
- 新增 jmh benchmark 基准测试模块。
https://github.com/dromara/dynamic-tp/pull/545
Refactor
- 移除 cglib,动态代理采用 bytebuddy 重构。
https://github.com/dromara/dynamic-tp/pull/538
- 重构告警规则,减少无用告警,告警更可控。
https://github.com/dromara/dynamic-tp/pull/553
- 实时监控指标暴露的端点名称从 dynamic-tp 修改为 dynamictp,消除 springboot 的 warn 警告
https://github.com/dromara/dynamic-tp/pull/542
Bugfix
- 修复 springboot devtool restart 后 DtpMonitor 中线程池被关闭报错拒绝任务问题。
https://github.com/dromara/dynamic-tp/pull/529
- 修复如果未引入 jackson-datatype-jsr310 会导致 jackson 异常并且无提示问题。
https://github.com/dromara/dynamic-tp/pull/534
- 优化潜在的 NPE 异常。
https://github.com/dromara/dynamic-tp/pull/537
Dependency
- sofa-rpc 升级,5.9.1 -> 5.12.0
- apache-dubbo 升级,3.0.7 -> 3.0.14
- apollo 升级,1.5.0 -> 2.0.0
- skywalking 升级,8.11.0 -> 9.1.0
- tars 升级,1.7.2 -> 1.7.3
v1.2.0(Feb 17, 2025)
v1.2.0 是一个大版本,主要功能是对 Spring 做了解耦,Spring 相关特性以独立 Module 的形式提供,其他非 Spring 框架集成 DynamicTp 时通过引入核心模块即可。
Feature
- 核心模块中移除对 Spring 的依赖,方便在其他非 Spring 项目中使用。
https://github.com/dromara/dynamic-tp/issues/527
Bugfix
- 兼容当 Dubbo 版本在 3.0.9 到 3.1.8 之间时,需要替换的执行器命名为 INTERNAL_SERVICE_EXECUTOR,而不是 ExecutorService.class.getName()。
https://github.com/dromara/dynamic-tp/pull/495
- 修复 Redis 限流器在 Redis Cluster 模式下报错问题。
https://github.com/dromara/dynamic-tp/pull/502
- 修复执行 scheduledFuture cancel 报错问题。
https://github.com/dromara/dynamic-tp/pull/516
- 修复 adapter-grpc 模块,grpc client channel executor 被关闭,调用报线程池关闭的错误。
https://github.com/dromara/dynamic-tp/pull/520
- 兼容高版本 okhttp3 Dispatcher 中线程池字段为 executorServiceOrNull 的情况。
https://github.com/dromara/dynamic-tp/pull/525
Optimize
- 优化线程池配置文件提示功能。
https://github.com/dromara/dynamic-tp/pull/498
- etcd kvClient get 添加超时时间控制。
https://github.com/dromara/dynamic-tp/pull/518
- zookeeper-starter 客户端初始化支持 zk 认证。
https://gitee.com/dromara/dynamic-tp/pulls/61
- 部分代码设计优化重构
1.1.9.1 (Oct 24, 2024)
1.1.9 (Sep 27, 2024)
Feature
- 新增 AgentAware,解决在有其他 agent 增强 Runnable 情况下尝试去拿 DtpRunnable,进行 tps、tpxx、运行超时等统计功能,1.1.7 及之前版本为了防止内存泄露会关闭这些功能。
https://gitee.com/dromara/dynamic-tp/issues/IAPNE8
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-extension-agent</artifactId>
<version>1.1.9</version>
</dependency>
- 新增全局配置功能,减少配置量,项目中可能会定义多个线程池,除了一些核心参数外,其他配置可能都是相同的,新增 globalExecutorProps 配置项,如果线程池某一配置项没配置,则从全局配置中取。
https://github.com/dromara/dynamic-tp/issues/443
spring:
dynamic:
tp:
globalExecutorProps:
queueType: VariableLinkedBlockingQueue
rejectedHandlerType: CallerRunsPolicy
allowCoreThreadTimeOut: false
awaitTerminationSeconds: 5
taskWrapperNames: ["ttl", "mdc"]
executors:
- threadPoolName: dtpExecutor1
executorType: eager
corePoolSize: 10
maximumPoolSize: 20
queueCapacity: 2000
threadNamePrefix: test
- threadPoolName: dtpExecutor2
corePoolSize: 20
maximumPoolSize: 40
queueCapacity: 1000
threadNamePrefix: test2
- 线程池配置新增 autoCreate 字段,标识是否自动生成 DtpExecutor 实例,默认为 true;若想使用 juc 原生线程池或 spring 线程池可置为 false,需在代码中手动创建线程池。1.1.9 之前版本中,配置在 executors 下的所有线程池在服务启动时会自动生成 DtpExecutor 注册到 spring 容器中,如果项目中大量使用了 Spring ThreadPoolTaskExecutor 接线程池对象,若配置的线程池名称相同,此时会报类型转换异常。
https://github.com/dromara/dynamic-tp/issues/472
spring:
dynamic:
tp:
globalExecutorProps:
taskWrapperNames: ["ttl", "mdc"]
executors:
- threadPoolName: springTaskExecutor
autoCreate: false
corePoolSize: 10
maximumPoolSize: 20
queueCapacity: 2000
threadNamePrefix: test
- threadPoolName: dtpExecutor2
corePoolSize: 20
maximumPoolSize: 40
queueCapacity: 1000
threadNamePrefix: test2
- 新增规则引擎框架 Liteflow 线程池适配模块
https://github.com/dromara/dynamic-tp/issues/474
引入以下依赖即可
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-adapter-liteflow</artifactId>
<version>1.1.9</version>
</dependency>
spring:
dynamic:
tp:
liteflowTp:
- threadPoolName: liteflowTp#LiteFlowDefaultWhenExecutorBuilder
corePoolSize: 10
maximumPoolSize: 20
keepAliveTime: 60
- ScheduledDtpExecutor 支持 TaskWrapper 任务包装。
https://github.com/dromara/dynamic-tp/issues/431
spring:
dynamic:
tp:
executors:
- threadPoolName: dtpExecutor1
executorType: scheduled
corePoolSize: 10
threadNamePrefix: test
taskWrapperNames: ["ttl", "mdc"]
Bugfix
- 修复 Spring ThreadPoolTaskExecutor 被框架管理后,ThreadPoolTaskExecutor 中定义的线程池装饰器失效问题。
https://gitee.com/dromara/dynamic-tp/issues/I9D31H
- 修复 RocketMQ 线程池适配模块,在低版本时 getAsyncSenderExecutor 报 NoSuchMethodError 错误问题。
https://github.com/dromara/dynamic-tp/issues/417
- 修复 TaskEnhanceAware 在多 Wrapper 包装后 taskName 丢失问题。
https://github.com/dromara/dynamic-tp/issues/420
- 修复 JMX 报错 InstanceAlreadyExistsException 问题。
https://github.com/dromara/dynamic-tp/issues/437
- 修复飞书报警填写了 username(非 openid 的情况), 发出的消息接受人为空问题。
https://github.com/dromara/dynamic-tp/issues/428
- 修复钉钉告警 @所有人 不生效问题。
https://github.com/dromara/dynamic-tp/issues/439
- 修复动态更新 taskWrappers 后导致 spring 线程池任务装饰器丢失问题。
https://github.com/dromara/dynamic-tp/issues/481
- 修复 dubbo adapter missing afterInitialize step。
Optimize
-
三方中间件线程池支持运行过程异常打印
-
Undertow 线程池支持任务包装器
-
juc 线程池、spring 线程池支持更多参数动态调整
-
部分代码设计优化重构
1.1.7 (Apr 1, 2024)
Feature
-
线程池配置增加 tryInterrupt 字段,控制任务执行超时后是否需要中断当前线程,@yanhom
-
新增 PriorityDtpExecutor,适用于可以指定任务的处理优先级场景,@KamToHung
-
指标数据采集器新增 jmx 方式,@KamToHung
-
线程池配置新增 env 字段,控制告警信息里的环境取值,@少鹏
-
告警平台配置增加 webhook 字段,降低配置复杂度,@kyao,@KamToHung
Bugfix
-
修复上下文刷新后,DtpMonitor 重复创建调度任务的问题,@trevzhang
-
修复 OpenTelemetryWrapper 没有将 traceId 传入 DynamicTp 框架的问题,@少鹏
-
修复告警时,tid 错乱问题,@yanhom
-
修复 dubbo 2.7.5 以下版本动态线程池不生效的问题,@piemon-nyah
-
修复异常拒绝任务时跳过 afterReject 执行的问题,@SimpleIto
-
修复飞书告警,机器人签名不为空时报错的问题,@guozi
Optimize
-
优化 spring-configuration-metadata,配置提示完整化,@KamToHung
-
支持 apache dubbo 最新版本,@KamToHung
-
完善 example
-
部分代码优化重构
Refactor
-
将通知告警基础包从 core 模块移动到 common 模块
-
将 plugin 插件包从 core 模块移动到 common 模块
1.1.6.1 (Dec 18, 2023)
Feature
-
支持 springboot3、jdk17、spring6,@KamToHung,@dragon-zhang,@yanhom1314
-
支持 springboot 1.x、springboot 2.0.x、spring 5.0.x 等低版本,@yanhom1314
-
新增初始化器 DtpInitizlizer SPI 接口,可以在框架启动前做一些自定义初始化操作,@yanhom1314
-
支持兼容 skywalking 9.0 引入的线程池插件,1.1.5 版本在跟 skywalking 线程池插件一起使用有内存泄露问题,@yanhom1314
-
告警信息里新增堆内存占比相关信息,@yanhom1314
-
配置文件配置 dynamictp 时,新增 DtpProperties 相关属性字段自动提示功能,@yanhom1314
Bugfix
-
修复 allowCoreThreadTimeOut 参数为 true 时,ScheduledDtpExecutor 初始化失败的问题,@kyao
-
修复 ExecutorWrapper#threadPoolStatProvider 成员属性初始化失败问题,@KamToHung
-
修复 ALARM_EXECUTOR 没有移除 traceId,导致告警信息里的 traceId 错乱问题,@yanhom1314
-
修复线程池别名不一致导致 Prometheus 指标上报失败问题,@androidcj
-
修复使用注解注入 ScheduledThreadPoolExecutor 线程池报错的问题,@kyao
-
修复 ScheduledDtpExecutor 不支持超时告警的问题,@kyao
-
修复 alibaba dubbo 初始化失败问题,@yanhom1314
Optimize
-
ThreadPoolBuilder、ThreadPoolCreator 方法完善丰富,@yanhom1314
-
优化 tps、tp99 等指标监控相关代码,@yanhom1314
-
DtpProperties 配置类中一些字段默认值调整,enabledCollect=true,waitForTasksToCompleteOnShutdown=true,awaitTerminationSeconds=3,@yanhom1314
-
优化 JVMTI 相关模块,@dragon-zhang,@yanhom1314
-
完善 example,@yanhom1314
-
部分代码优化重构,@yanhom1314
-
hutool、sc、sca、sb 等依赖版本升级,@yanhom1314
Refactor
-
重构 NacosRefresher,去掉在配置中手动指定线程池配置文件 data-id,降低接入成本,@wuhui
-
重构 ApolloRefresher,去掉在配置中手动指定线程池配置文件 namespace,降低接入成本,@BanTanger
-
重构所有 cloud 模块的 refresher,通过监听 EnvironmentChangeEvent 事件,更精准的判断是否线程池配置变动进行刷新,@yanhom1314
1.1.5 (Nov 1, 2023)
Feature
Bugfix
-
修复 jetty 线程池代理后一直触发任务超时告警的问题,@kyao
-
修复 DtpPostProcessor 增强普通线程池后没返回代理,shutdown 原线程池的问题,@yanhom
-
修复代理三方线程池时直接继承juc线程池,没兼容框架内自定义线程池的场景,如 dubbo、motan 的 eager 模式,@yanhom
Optimize
-
各三方中间件线程池被代理后,原线程池优雅关闭,@yanhom
-
设置 hutool http 工具包的超时时间,@chenkangning
-
调整告警项的默认阈值,@yanhom
-
部分代码优化重构,@yanhom
1.1.4 (Sep 26, 2023)
Feature
-
支持 Spring 项目,SpringBoot 相关特性只在 starter 模块引入,@dragon-zhang
-
添加 jvmti 黑科技模块,方便集成管理各种三方包线程池,@dragon-zhang
-
升级 VariableLinkedBlockingQueue 到 jdk1.8 的 LinkedBlockingQueue 的实现,@yanhom
-
添加插件机制,基于此可以对框架做自定义开发扩展,@WindSearcher
-
细化告警配置,支持不同告警项配置不同接受人,@kyao
-
通知告警平台支持云之家,@chunhui_lu
-
支持 SpringBoot 1.x,@yanhom
-
第三方线程池(tomcat、undertow、dubbo、rocketmq、okhttp3 等等)支持 run_timeout、queue_timeout、reject 告警,@kyao,@yanhom
-
提供 Aware 扩展,可以扩展自定义线程池执行过程,@kyao
-
监控数据新增线程池别名,@zhifei
Bugfix
-
修复 Tomcat 高低版本兼容性报错问题,@yanhom
-
修复其他 agent 增强线程池后,强转 DtpRunnable 失败的问题,@yanhom
-
修复企微告警无@提醒的问题,@yanhom
-
修复企微告警配置多个接受人不能正确@的问题,@KamToHung
-
修复钉钉告警不能@所有人问题,@ChenAn
-
修复因 Bean 初始化顺序不确定导致的 ApplicationContextHolder npe 问题,@yanhom
-
修复修复拒绝策略为 CallerRunsPolicy 时,MdcRunnable 会删除主线程 mdc 信息的问题,@kyao
Optimize
-
优化 dtp 内部 spi 的使用,统一封装管理,@peachyy
-
部分代码优化重构,@yanhom,@KamToHung,@dragon-zhang,@kyao
-
告警信息优化,trace 信息可以自己扩展,集成内部 ELK 等平台,@yanhom
1.1.3 (Apr 28, 2023)
Feature
-
groupId 及包名改为 org.dromara.dynamictp
-
引入时间轮重构任务超时(排队超时、执行超时)功能,@KamToHung
-
增加 ExecutorAdapter,做各种框架线程池的适配器,@dragon-zhang
-
WebServer(Tomcat、Undertow、Jetty)支持通知告警,@dragon-zhang
-
阿里云商业版 RocketMQ 线程池管理支持,@Redick01
-
引入 JsonUtil,根据依赖选择 Jackson/Gson/FastJson 做框架 json 序列化工具,减少外部依赖,@topsuder
-
重构 OrderedDtpExecutor 有序线程池实现,@yanhom1314, @KamToHung
-
实现优雅关闭线程池功能,@yanhom1314
-
增加 dependencies 模块,统一管理依赖,@KamToHung
-
TaskWrapper 支持 OpenTelemetry,@brendanv
Bugfix
-
修复飞书告警失败问题,@KamToHung
-
修复配置变更后不通知的问题,@yanhom1314
-
修复 dtp-alarm 线程 StackOverflowError 异常,@yanhom1314
-
修复 DtpPostProcessor 初始化晚于线程池实例初始化问题,@KamToHung
Optimize
-
丰富 Undertow 线程池监控指标,@yanhom1314
-
优化当引入 Dtp 包,不启用时可以通过手动配置关闭,@ruoan777
-
优化告警功能,解决实际推送的告警信息看着不准的问题,@ruoan777
-
线程池内部注册器模块优化,@KamToHung
-
Hutool 依赖优化,只引入用到的包,@KamToHung
-
部分代码优化重构,@yanhom1314,@KamToHung,@dragon-zhang