官宣!Hippo4j 1.4.x 新版本正式发布,探索更多玩法
2022 年 11 月 06 日,Hippo4j 1.4.3 版本正式发布!
Hippo4j 是一个线程池框架,基于 JDK 原生线程池扩展了诸多功能,比如:运行时动态变更线程池参数、采集线程池运行时数据以及多种维度线程池报警等,为业务系统提高线上运行保障能力。
项目自 2021 年 6 月份开源,一直保持快速迭代,共经历 17 次版本发布,已知 23 家公司登记使用。截止目前,共计 83 位开源社区小伙伴参与贡献,这也是 Hippo4j 能保持快速迭代的原因。
GitHub:
https://github.com/opengoofy/hippo4j
Gitee:
https://gitee.com/magegoofy/hippo4j
功能列表
项目使用 Hippo4j 后,提供以下功能支持:
全局管控 - 管理应用线程池实例。
动态变更 - 应用运行时动态变更线程池参数,包括但不限于:核心、最大线程数、阻塞队列容量、拒绝策略等。
通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长。
数据采集 - 采集线程池运行时数据,采集方式有:日志打印、内置采集、Prometheus、ElasticSearch、InfluxDB 等。
运行监控 - 实时查看线程池运行时数据,自定义时间内线程池运行数据图表展示。
功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务。
多种模式 - 内置两种使用模式:依赖配置中心和无中间件依赖。
容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更。
框架适配 - Dubbo、Hystrix、RabbitMQ、RocketMQ 等消费线程池运行时数据查看和线程数变更。
变更审核 - 提供多种用户角色,普通用户变更线程池参数需要 Admin 用户审核方可生效。
动态化插件 - 内置多种线程池插件,支持用户自定义插件以及运行时扩展。
发版说明
1.4.x 的 3 个版本新增了诸多特性,本篇文章带你从功能开发、优化、重构以及问题修复几个角度上详细了解。
功能开发
重构 Spring 后置处理器创建动态线程池逻辑
官网开启多版本化功能
官网支持国际化,en-US
适配线程池延迟初始化 @wulangcode
添加 Codecov 相关代码覆盖率指标
项目优雅关闭时停止运行状态采集
强制指定客户端注册的 ip + port
支持 spring-cloud-tencent Polaris 线程池动态更新 @weihubeats
服务启动时加载 MySQL、H2 数据库初始化语句
Adapter 初始化覆盖核心参数 @pizihao
Server 端新增是否开启认证模式 @baymax55
支持 H2 数据库 @weihubeats
动态线程池配置变更时,支持单个、多个或全部节点变 @pizihao
增加线程池活跃度和容量报警可选择关闭
@DynamicThreadPool 线程池不存在则创建 @shanjianq
支持 ETCD 配置中心动态调整参数 @weihubeats
创建动态线程池支持 spring 线程池 @BigXin0109
线程池实例变更增加执行超时时间
线程池相关查询页面增加阻塞队列属性
定义动态线程池时,抽象默认配置
提供 ExecutorContext 封装上下文细节 @road2master
Docker 制作服务端镜像,帮助开发者快速启动 @BigXin0109
RabbitMQ 适配器增加多个 MQ 数据源 @weihubeats
功能重构
DynamicThreadPoolExecutor 重构,增加插件扩展逻辑 @Createsequence
重构线程池监控,新增容器和三方框架线程池监控
重构服务端包目录,聚合 hippo4j-server 相关 module
替换底层网络工具类 OkHttp @yanrongzhen
全局移除 commons-lang3 工具包依赖 @yanrongzhen
去除三方工具类依赖 @pizihao
全局移除 Guava 工具包依赖 @road2master
DockerFile 基于 H2 数据库重新构建 @BigXin0109
问题修复
dubbo 线程池无法获取运行信息 @iwangjie
线程池检查活跃度报警取值错误 @maxisvest
动态线程池修改多次后队列提示信息丢失
docker 部署 mysql 启动报错 H2 驱动
docker-startup.sh 的 mysql 配置多个“-” @Malcolmli
动态注册线程池队列容量赋值错误
飞书超时类型告警不存在 Trace 信息时发送错误 @mageeric
Dubbo 2.7.15 无法获取线程池引用 @iwangjie
动态线程池报警参数颠倒 @jinlingmei
动态线程池设置关闭时启动报错 @dousp
ExecutorTtlWrapper 类型的 Executor 不生效 @BigXin0109
Undertow 获取 WebServer 类型参数异常 @shining-stars-lk
修复线程池核心、最大线程数校验限制
ByteConvertUtil#getPrintSize 单位转换错误 @onesimplecoder
创建线程池单选框选择错误
ReflectUtil#getFieldsDirectly missing fields @BigXin0109
本地代码中设置的 capacity 无效 @BigXin0109
服务端线程池超时时间存在拆箱空指针异常 @oreoft
未读取服务端返回执行超时时间属性
ResizableCapacityLinkedBlockingQueue#put 当前元素数量大于 capacity 未阻塞
功能优化
修改报警文案,【警报】修改为【告警】 @wulangcode
自动选择 H2 数据库的存储路径 @iwangjie
服务端在客户端后面启动,依旧支持长轮训 @wulangcode
配置未发生变更时,长轮询返回 304 @wulangcode
discovery 服务 Lease 类中判断过期时间需要多等一个 duration @w-jirong
优化 ThreadPoolBuilder#maxPoolNum 核心线程不得大于最大线程 @wulangcode
hippo4j console ui 迁移至本项目
查询 Web 线程池列表添加框架标识
优化 H2 初始化逻辑
线程池实例运行数据采集,如果线程池 id 不存在,且长度超长,会报异常 @Gdk666
项目中动态线程池数量为空时,存在 CPU 空转情况
客户端注册服务端失败,输出服务端返回信息 @wulangcode
调整数据库项目 id 和线程池 id 字段长度
增加代码检查工具 maven-checkstyle-plugin
调整控制台监控图表颜色展示
长轮询任务判断逻辑优化 @shining-stars-lk
线程池存在实例不允许删除线程池 @shanjianq
优化租户、项目列表展示排版
通知报警模块项目和线程池下拉查询排序修改
动态线程池拒绝策略触发,以异步的方式报警
优化框架中线程池工厂产生的线程名称 @road2master
后续版本规划
截至目前,梳理出后续功能规划如下,下一个版本 1.5.0,会从中挑选一部分核心功能开发。
服务端支持分布式集群部署,通过分布式协议保证数据一致性。
项目支持国际化,当前仅提供简体中文以及英语两种语言。
账号添加多租户功能,不同租户仅能看到已授权数据。
支持用户自定义配置邮箱报警,丰富报警渠道。
梳理前端控制台所有 OpenAPI,提供为接口文档,方便公司引入自定义前端。
控制台添加历史配置查看,以及回滚功能。
梳理所有功能操作日志功能,方便问题回溯。
服务端支持 PostgreSQL 数据库。
......
我们欢迎开源社区的开发者们一起参与到 Hippo4j 的版本建设中来,同时大家如果有其他的意见建议也可以给我们提一个 Issue 或者 PR,大家可以来一起探讨怎么更好的共建项目。
关于学习
如果您公司没有使用 Hippo4j 场景的话,我也建议去阅读下 Hippo4j 的底层原理,主要有以下几个原因:
为了提高代码质量以及后续的扩展行为,运用多种设计模式实现高内聚、低耦合。
框架底层依赖 Spring 框架运行,并在源码中大量运用 Spring 相关功能。
运用 JUC 并发包下多种工具保障多线程运行安全,带你通过实际场景理解并发编程。
借鉴主流开源框架 Nacos、Eureka 实现轻量级配置中心和注册中心功能。
自定义 RPC 框架实现,封装 Netty 完成客户端/服务端网络通信优化。
通过 CheckStyle、Spotless 等插件规范代码编写,保障高质量代码行为和代码样式。
......
感兴趣的小伙伴们可以加入我们的技术交流社群,一起交流 Hippo4j 的技术问题及难点,共建 Hippo4j 开源社区!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序
最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享。 PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI 库之一,使用 PyQt5 我们能够很容易的开发桌面应用,接下来我们将用它来开发一个下载服务器日志文件的小程序。 前期准备 软件 QT5 Python 模块 PyQt5==5.15.7 paramiko==2.9.2 PyCharm 添加扩展工具 PyUIC PyUIC 扩展用于将使用 Qt Designer 生成的 ui 文件转成 py 文件,可以在 PyCharm 中通过 Preferences-Tools-External Tools 进行配置,截图如下: Program:/Users/macbookpro/workspace/projects/DownloadServerLog/venv/bin/python3.9 Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py Working dire...
- 下一篇
ShopWindV3.4.3 更新,uni-app 商城 PC+APP+H5+小程序
ShopWind 是一款基于 Yii2.0 框架深度重构的 B2B2C、O2O 行业的电商系统软件,商业版包含 PC、手机 H5、微商城、APP 客户端(Andorid+iOS)、微信小程序、今日头条小程序等多端。ShopWind 提供专业、快速、安全的底层软件设计和免费的更新升级服务,做好完善的开发文档和接口文档方便开发者在底层软件的基础上开发各种应用、模板、或者插件。 官网网址:https://www.shopwind.net 开发文档:https://developer.shopwind.net API 接口文档:http://docs.shopwind.net 开发者社区:https://forum.shopwind.net PC 体验 前台体验:http://test.shopwind.net买家测试账号:buyer 密码:123456 支付密码:123456 后台体验:http://test.shopwind.net/admin平台管理员账号:admin 密码:123456 商家体验:http://test.shopwind.net/seller/login.html商家测...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址