# Dynamic thread pool **Repository Path**: charsolivers/dynamic-thread-pool ## Basic Information - **Project Name**: Dynamic thread pool - **Description**: 动态线程池 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-23 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dynamic Thread Pool (动态线程池中间件) ## 📖 项目简介 在微服务高并发场景下,传统 Java 线程池(`ThreadPoolExecutor`)的参数(核心线程数、最大线程数等)通常硬编码在项目或配置文件中。当业务流量突增或系统负载变化时,往往需要修改代码或配置并**重启服务**才能生效,这会导致响应滞后甚至引发生产事故。 Dynamic Thread Pool 是一个基于 Spring Boot 和 Redis 开发的轻量级动态线程池治理组件。它旨在解决上述痛点,提供以下核心能力: 动态热更新:在不重启应用的情况下,毫秒级在线调整线程池的核心线程数和最大线程数。 实时可观测:统一采集各个实例的线程池运行状态(活跃数、队列容量等)并周期性上报,提供数据支撑。 零侵入接入:基于 Spring Boot Starter 机制封装,业务方只需引入依赖,即可自动发现并接管容器内的全部线程池。 高可用设计:利用 Redis Pub/Sub 进行配置分发,并结合 Redis Bucket 实现启动期缓存回填,避免因网络抖动或服务重启导致配置丢失。 ## 架构设计 项目采用经典的三层架构设计: 1. 管理端 (Admin):提供可视化的 API 接口,负责展示所有服务节点的线程池监控数据,并下发配置变更指令。 2. 注册中心 (Registry):基于 Redis(Redisson),负责配置消息的 Pub/Sub 广播分发,以及客户端监控数据的统一聚合。 3. 客户端 SDK (Starter):嵌入业务应用内部,自动接管本地 `ThreadPoolExecutor`,监听配置变更并实时生效,同时执行定时任务上报运行指标。 ## 核心特性 跨应用隔离与多实例聚合:以 `appName + 线程池名称` 作为唯一标识,支持单应用多线程池管理,以及多应用之间的环境隔离。 配置一致性兜底:除了订阅 Topic 实时变更外,SDK 启动时会主动从 Redis 拉取最新持久化配置进行回填,确保最终一致性。 优雅的降级策略:通过 `@ConditionalOnProperty` 开关控制装配,当外部 Redis 依赖不可用时,系统自动降级使用本地默认配置,绝不阻断业务线启动。 ## 技术栈 核心框架: Spring Boot 2.7.x 组件装配: Spring Boot AutoConfiguration (Starter) 并发控制: Java Concurrency (`ThreadPoolExecutor`) 配置与通信: Redis, Redisson (Topic, List, Bucket) 定时调度: Spring `@Scheduled` 其他: RESTful API, Lombok, Fastjson ## 模块说明 - `dynamic-thread-pool-spring-boot-starter`:客户端 SDK,业务服务引入此依赖即可获得动态线程池能力。 - `dynamic-thread-pool-admin`:管理端控制台,提供配置查询与修改的 REST 接口。 - `dynamic-thread-pool-test`:测试工程,用于本地模拟和联调业务场景。 --- ## 快速开始 ### 1. 启动依赖环境 确保本地或服务器已安装并启动 Redis。 ### 2. 引入依赖 在你的 Spring Boot 业务项目中引入 Starter: ```xml cn.bugstack.middleware dynamic-thread-pool-spring-boot-starter 1.0 ``` ### 3. 添加配置 在业务项目的 `application.yml` 中开启动态线程池并配置 Redis 连接: ```yaml spring: application: name: your-app-name # 必须配置,用于隔离不同应用的线程池 dynamic: thread: pool: config: enabled: true # 开启动态线程池 host: 127.0.0.1 port: 6379 password: pool-size: 10 ``` ### 4. 启动与测试 1. 启动你的业务服务。 2. 启动 `dynamic-thread-pool-admin` 服务。 3. 调用 Admin 提供的 API 接口查看或修改你的线程池参数。 --- ## 参与贡献 欢迎提交 Issue 和 Pull Request 一起完善该项目!