简略来总结下动态线程池 DynamicTp 的 2022 年吧,DynamicTp 中心代码是我在 2022 年元旦那三天写的,当时为什么要写这个项目呢?

首要根据以下几点原因:

  1. 我之前也在美团待过,很早就知道内部有动态线程池这么一款工具

  2. 自己日常开发中,担任的服务无一例外都会用到线程池

  3. 用过线程池的都知道,那些中心参数是真的不好确定,需求做许多修正、发布、验证这套作业

  4. 线程池的运转对开发来说是个黑盒,运转情况不能及时感知,短少监控告警功用

  5. 竟然咱们都有这些痛点,为了更好的用好线程池,就计划搞个动态线程池的轮子方便自己,也方便他人

这便是最初为啥要写这个项目的大致原因了。

程序员不止需求完结作业上的 CRUD,也需求有一种发现痛点,处理痛点的气魄,尽管这听起来很枯燥,但投入其间会发现其实也挺有趣的。

写之前就确定了 DynamicTp 的完结思路及需求供给的功用。

  1. 要尽或许轻量,降低接入运用的复杂度,所以选择跟装备中心结合

  2. 需求有动态调整线程池参数的才能,根据装备中心的实时热更来完结

  3. 需求有监控功用,收集线程池运转过程中的各项指标,结合像 Prometheus+Grafana 这类监控工具来做可视化大盘

  4. 需求有告诉告警功用,对回绝使命数、队列运用率、履行超时使命数、线程池活跃度等到达装备的阈值时及时宣布告警

  5. 适配常用第三方中间件的内部线程池,服务启动时拿到线程池目标交给 DynamicTp 来办理

整个项目也都是环绕这四个中心功用来打开的。

我的开源 2022,从 0 到 2.7k stars

许多加我 vx 跟我聊天的小伙伴问的最多的问题便是想学习下项目,但是不知道从何下手。

其实我想说的是你要学习任何一个东西,一定先要去了解清楚它要处理的问题是什么?中心功用是什么?作者的思路一般也都是环绕着这些中心功用来打开做的,一步步完善成一个大工程的。中心功用肯定也不止一个,会有多个,你能够选择从一个你感兴趣的下手,看整个数据流、调用链路是怎样的,适当越过一些细枝末节。这样看的多了慢慢就有感觉,就能串起来了。

也有一些小伙伴会咨询我说怎么做开源,其实开源这个东西咱们千万别把它想的多高大上。跟你日常的业务开发也差不多,业务需求是产品提的,需求处理一类问题,一般是它驱的、有偿的。开源项目本质上来说也是需求处理一类问题,需求需求自己寻觅,能够找自己日常开发中的一些痛点,是自驱的、用爱发电的。做开源就需求牺牲自己许多的业余时间,上班时间仍是要仔仔细细做公司的事儿,像我一般都是周末或者晚上下班回家抽时间弄下开源的,带点热爱参加开源或许会走的更远。不要急功求成,做开源本身也是对自己的一种才能提升,项目火不火能够不用那么看重,信任是金子总会发光的。

DynamicTp 从上一年一月开源到现在共收获了 2.8k 的 stars,740+forks,30+奉献者,600+群友,感谢一年来支撑咱们的人。

我的开源 2022,从 0 到 2.7k stars

  1. 1 月项目开源,感谢@铂赛东,东哥在项目初期给我做了一波推行,项目 star 到达近 100

  2. 2 月美团动态线程池实践思路,开源了该篇文章在掘金渠道火了,长时间霸榜榜首,给了项目巨大的流量支撑,项目总 star 数到达近 600,或许项目的许多关注者都是从掘金渠道来的吧,这儿非常感谢掘金渠道给的机会

  3. 3 月发布榜首个可用版别 1.0.2,3y 的 austin 项目也接入运用,功用特性持续奉献,感谢@Redick01,辉哥参加奉献了许多新特性

    我的开源 2022,从 0 到 2.7k stars

  4. 4 月项目将项目捐赠到了 Dromara 社区,为了更好的发展,根据社区来传播,让更多人接触到 DynamicTp

  5. 5 – 12 月,项目特性持续更新,更多小伙伴参加奉献,项目稳定性也越来越高,相继发布 1.0.8 里程碑版别及最新版别 1.0.9,年后估计发布 1.1.0 版别,适配了更多第三方中间件。非常感谢给 DynamicTp 奉献代码及 idea 的小伙伴们

我的开源 2022,从 0 到 2.7k stars

也感谢那些自发帮 DynamicTp 推文的号主们,JavaGuide、Java3y、架构师社区、石衫的架构笔记、架构师生长指南、元人部落、涛歌仍旧、java1234、苏三说技能、小哈学 java、java 学思等等。

经过多个版别的迭代,现在最新版别 v1.0.9 具有以下特性

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

  • 告诉告警:供给多种报警维度(装备改变告诉、活性报警、容量阈值报警、回绝触发报警、使命履行或等候超时报警),已支撑企业微信、钉钉、飞书、邮件报警,一起供给 SPI 接口可自界说扩展完结

  • 运转监控:定时收集线程池指标数据,支撑经过 MicroMeter、JsonLog 日志输出、Endpoint 三种方式,可经过 SPI 接口自界说扩展完结

  • 使命增强:供给使命包装功用,完结 TaskWrapper 接口即可,如 MdcTaskWrapper、TtlTaskWrapper、SwTraceTaskWrapper,能够支撑线程池上下文信息传递

  • 多装备中心支撑:根据干流装备中心完结线程池参数动态调整,实时生效,已支撑 Nacos、Apollo、Zookeeper、Consul、Etcd,一起也供给 SPI 接口可自界说扩展完结

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

  • 轻量简略:根据 SpringBoot 完结,引入 starter,接入只需简略 4 步就可完结,顺利 3 分钟搞定

  • 多模式:参阅 Tomcat 线程池供给了 IO 密集型场景运用的 EagerDtpExecutor 线程池

  • 兼容性:JUC 一般线程池和 Spring 中的 ThreadPoolTaskExecutor 也能够被结构监控,@Bean 界说时加 @DynamicTp 注解即可

  • 可靠性:结构供给的线程池完结 Spring 生命周期方法,能够在 Spring 容器封闭前尽或许多的处理队列中的使命

  • 高可扩展:结构中心功用都供给 SPI 接口供用户自界说个性化完结(装备中心、装备文件解析、告诉告警、监控数据收集、使命包装等等)

  • 线上大规模使用:参阅美团线程池实践,美团内部已经有该理论老练的使用经历

我的开源 2022,从 0 到 2.7k stars

最终,欢迎咱们了解试用 DynamicTp。

官网:dynamictp.cn

gitee 地址:gitee.com/dromara/dyn…

github 地址:github.com/dromara/dyn…

「回忆2022,展望2023,我正在参加2022年终总结征文大赛活动」