別在簡歷上寫 CRUD 項目了,來個動態線程池不香嗎
作者:小牛肉
目前開源的動態線程池也不算少,其實都是基于美團的那個思路,底層原理不算很難,所以上手難度比較低,算是性價比很高的項目了。
又到了項目推薦專欄啦,相比于業務類項目,輪子類項目或者工具類項目其實會更受歡迎,今天推薦兩款動態線程池,文檔都都比較全。目前開源的動態線程池也不算少,其實都是基于美團的那個思路,底層原理不算很難,所以上手難度比較低,算是性價比很高的項目了。
動態線程池 1:DynamicTp
項目地址:
- Github:https://github.com/dromara/dynamic-tp
- 教程地址:https://dynamictp.cn/guide/other/articles.html
項目架構:
項目簡介:基于配置中心的輕量級動態線程池,內置監控告警功能,集成常用中間件線程池管理,可通過SPI自定義擴展實現,目前最新版本 v1.1.0 具有以下特性
- 代碼零侵入
- 通知告警:已支持企業微信、釘釘、飛書、郵件報警,同時提供 SPI 接口可自定義擴展實現
- 運行監控:定時采集線程池指標數據,支持通過 MicroMeter、JsonLog 日志輸出、Endpoint 三種方式,可通過 SPI 接口自定義擴展實現
- 任務增強:提供任務包裝功能
- 多配置中心支持:已支持 Nacos、Apollo、Zookeeper、Consul、Etcd、Polaris,同時也提供 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 接口供用戶自定義個性化實現(配置中心、配置文件解析、通知告警、監控數據采集、任務包裝等等)
代碼結構:
動態線程池 2:Hippo4j
項目地址:
- Github:https://github.com/opengoofy/hippo4j
- 教程地址:https://hippo4j.cn/docs/user_docs/intro
項目架構:
項目簡介:動態可觀測線程池,提高系統運行保障能力,提供以下功能支持:
- 全局管控 - 管理應用線程池實例。
- 動態變更 - 應用運行時動態變更線程池參數,包括但不限于:核心、最大線程數、阻塞隊列容量、拒絕策略等。
- 通知報警 - 內置四種報警通知策略,線程池活躍度、容量水位、拒絕策略以及任務執行時間超長。
- 數據采集 - 支持多種方式采集線程池數據,包括但不限于:日志、內置采集、Prometheus、InfluxDB、ElasticSearch 等。
- 運行監控 - 實時查看線程池運行時數據,自定義時間內線程池運行數據圖表展示。
- 功能擴展 - 支持線程池任務傳遞上下文;項目關閉時,支持等待線程池在指定時間內完成任務。
- 多種模式 - 內置兩種使用模式:依賴配置中心 和 無中間件依賴。
- 容器管理 - Tomcat、Jetty、Undertow 容器線程池運行時查看和線程數變更。
- 框架適配 - Dubbo、Hystrix、RabbitMQ、RocketMQ 等消費線程池運行時數據查看和線程數變更。
- 變更審核 - 提供多種用戶角色,普通用戶變更線程池參數需要 Admin 用戶審核方可生效。
- 動態化插件 - 內置多種線程池插件,支持用戶自定義插件以及運行時擴展。
- 多版本適配 - 經過實際測試,已支持客戶端 SpringBoot 1.5.x => 2.7.5 版本(更高版本未測試)
責任編輯:武曉燕
來源:
飛天小牛肉