官宣! Hippo4j 1.4.x 新版本正式发布,探索更多玩法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
machen
V2EX    Java

官宣! Hippo4j 1.4.x 新版本正式发布,探索更多玩法

  •  
  •   machen
    magestacks 2022-11-11 08:54:07 +08:00 2197 次点击
    这是一个创建于 1072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 开源社区!

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2641 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:05 PVG 18:05 LAX 03:05 JFK 06:05
    Do have faith in what you'r doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86