likes
comments
collection
share

21位贡献者46+需求,异步线程池框架Hippo4j 1.5.0发版

作者站长头像
站长
· 阅读数 14

什么是 Hippo4j

Hippo4j 是一款异步线程池框架,支持线程池动态变更&监控&报警,无需修改代码轻松引入。

至今已开源近两年时间,期间发布 18 次 Release 版本,共 38+ 公司部署生产使用,经历单节点连接数百应用考验。

共收获 Star 5.3k,11 位核心贡献者 Committer,117 位贡献者 Contributor。

GitHub:github.com/opengoofy/h…

21位贡献者46+需求,异步线程池框架Hippo4j 1.5.0发版

解决了什么问题

线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景,线程池的使用是必不可少的。

如果有在项目中实际使用线程池,相信你可能会遇到以下痛点:

  • 线程池随便定义,线程资源过多,造成服务器高负载。
  • 线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险。
  • 线程池任务执行时间超过平均执行周期,开发人员无法感知。
  • 线程池任务堆积,触发拒绝策略,影响既有业务正常运行。
  • 当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起。
  • 原生线程池不支持运行时变量的传递,比如 MDC 上下文遇到线程池就 GG。
  • 无法执行优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃。
  • 线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手。

1.5.0 版本发布说明

这是一个大的功能增强版本,建议按照当前版本升级。具体信息可查看 Release 标签地址:1.5.0

Use Change

  • [Config] 配置属性中容器线程池配置命名改为 spring.dynamic.thread-pool.web

  • [Server] 为了使语义更加明确,当前版本中线程池执行超时时间的最低可设置为-1,表示不设置超时。需要注意的是,如果客户端使用的是低于1.5.0的版本,可能会存在不兼容的情况。

  • [Common] 为了使语义更加明确,废弃 ThreadPoolBuilder#maxPoolNum,新增加 ThreadPoolBuilder#maximumPoolSize,原 API 还可以使用,将在后续版本删除。

Feature

  • [#1124 ] Config 模式支持 Web 容器配置修改通知 @yanrongzhen
  • [#1148 ] 优化执行时间超时 executeTimeOut 为空或 <= 0 的场景 @sususama
  • [#1128 ] 控制台前端国际化开发 @Svamei @ PleasePerfunctory
  • [#1068 ] 默认线程池配置填充至线程池实例 @magestacks
  • [#1055 ] 适配第三方自定义线程池,支持外部SPI方式扩展线程池类型 @lingfengcoder
  • [#547 ] 支持 Consul 配置中心动态调整参数 @road2master
  • [#624 ] 添加 Dubbox 线程池监控及动态变更 @iwangjie
  • [#977 ] 增加 ROLE_MANAGE 角色,主要负责线程池变更审核 @magestacks
  • [#821 ] 开发用户修改密码功能 @wulangcode

Refactor

  • [#1092 ] 关于扩展点 SPI 方案的重构 @yanrongzhen
  • [#1025 ] 优化BlockingQueueTypeEnum实现 @lianyiwuming
  • [#1015 ] 重构Web线程池配置文件命名 @yanrongzhen
  • [#1071 ] ThreadPoolBuilder提供全新的最大线程池API @jjiey
  • [#1058 ] 客户端引入多个 Web 容器依赖导致 WebThreadPoolService 报错 @Createsequence
  • [#844 ] 移除 alibaba-dingtalk-service-sdk @baymax55

Bug

  • [#1085 ] DynamicThreadPoolRegisterParameter#threadFactory序列化异常 @magestacks
  • [#1163 ] Adapter 适配三方线程池启动顺序错误 @magestacks
  • [#1134 ] Web容器启动时刷新最新配置失败 @yanrongzhen
  • [#1129 ] Prometheus 不能正常采集 Hystrix 线程池 queue.capacity 数据 @jjiey
  • [#1121 ] 线程池实例包含已关闭客户端节点 @zjHe
  • [#1106 ] springBoot 1.5.x适配Web容器线程池调整 @yanrongzhen
  • [#1114 ] ZipkinExecutorAdapter 可能出现空指针异常 @yult97
  • [#1074 ] Hystrix Adapter 支持 hippo4j config @jjiey
  • [#1040 ]线程池参数默认配置与文档描述不符 @wulangcode
  • [#1002 ] SpringBoot Nacos 动态刷新错误使用 SpringCloud Nacos 类 @BigXin0109
  • [#990 ] TTL 装饰的线程池无法执行等待任务完成插件 @Createsequence
  • [#966 ] Alibaba Dubbo 无法获取线程池运行状态 @iwangjie

Optimize

  • [#1159 ] 优化飞书和企业微信失败处理逻辑 @ITXiaoShiTou
  • [#1156 ] 线程池通知管理调整查询租户&项目&线程池默认10条 @tudou0806
  • [#1069 ] 线程池执行超时时间最小值支持 -1 @Ronan1024
  • [#1111 ] 核心阻塞队列枚举 BlockingQueueTypeEnum.createBlockingQueue(String blockingQueueName, Integer capacity)抛出NPE问题修复 @LiXuemin
  • [#1072 ] 提供公用方法安全设置 corePoolSize 和 maxPoolSize @jjiey
  • [#1051 ] 前端国际化登录页面中文错误 @xiaobaisdz
  • [#1001 ] 容器停止时,若线程池在等待关闭时,有任务触发超时告警会抛异常警类 @Createsequence
  • [#1024 ] 客户端与 Hippo4j revision 冲突 @baymax55
  • [#720 ] 修复 Dubbo 错误的日志打印 @baymax55
  • [#992 ] 优化 Hippo4j Banner 打印时可能存在的空指针 @wulangcode
  • [#976 ] 注册线程池默认指定过期时间和线程工厂 @magestacks
  • [#964 ] 长轮询时配置未变更返回304状态码适配低版本客户端 @wulangcode
  • [#942 ] 修改 MyBatis-Plus 数据库方言配置 @li-xiao-shuang
  • [#959 ] ThreadPoolPluginRegisterPostProcessor 打印过多 WARN 日志 @Createsequence
  • [#960 ] ThreadPoolPluginRegisterPostProcessor 实现 BeanPostProcessor 默认方法 postProcessBeforeInitialization @Createsequence

代码贡献

感谢所有为项目作出贡献的开发者。如果有意贡献,参考 good first issue

21位贡献者46+需求,异步线程池框架Hippo4j 1.5.0发版

参考官网 Hippo4j 官网,可领取新手详细开源贡献指南,按照流程一次性提交 PR 成功。

文末总结

Hippo4j 目前已登记在生产环境 使用的公司 有 38 家,涵盖支付、打车、银行、金融、租房等多个领域。

如果您公司有适用场景,可以放心使用。使用公司中最高单节点经历 QPS 3w+,性能与未使用 Hippo4j 相差无几。

如果您公司没有使用 Hippo4j 场景的话,我也建议去阅读下项目的底层原理。主要有以下几个原因:

  • 为了提高代码质量以及后续的扩展行为,运用多种设计模式实现高内聚、低耦合。
  • 框架底层依赖 Spring 框架运行,并在源码中大量使用 Spring 相关功能。
  • 运用 JUC 并发包下多种工具保障多线程运行安全,通过实际场景理解并发编程。
  • 借鉴主流开源框架 Nacos、Eureka 实现轻量级配置中心和注册中心功能。
  • 自定义 RPC 框架实现,封装 Netty 完成客户端/服务端网络通信优化。
  • 通过 CheckStyle、Spotless 等插件规范代码编写,保障高质量代码行为和代码样式。

欢迎在 GitHub 仓库给个 Star 支持我们,您的支持就是我们前进的动力。

GitHub:github.com/opengoofy/h…