一、Hippo4j简介
特点:
-
动态变更
应用运行时动态变更线程池参数,包括不限于核心、最大线程、阻塞队列大小和拒绝策略等,支持应用集群下不同节点线程池配置差异化.
-
自定义报警
应用线程池运行时埋点,提供四种报警维度,线程池过载、阻塞队列容量、运行超长以及拒绝策略报警,并支持自定义时间内不重复报警.
-
运行监控
支持自定义时长线程池运行数据采集存储,同时也支持 Prometheus、InfluxDB 等采集监控,通过 Grafana 或内置监控页面提供可视化大屏监控运行指标。
当前使用线程池存在的一些痛点:
- 线程池难以灵活定义。
- 可能在高并发情况下,大量任务堆积在阻塞队列中,或触发拒绝策略,进而影响业务正常运行。
-
合理配置线程池的大小、任务队列长度等参数需要根据具体应用场景进行调整,往往比较复杂。
-
线程池中的某些线程可能一直在处理长时间运行的任务,导致其他任务长时间得不到处理。
Hippo4j监控工具就是解决上述这些问题的,Hippo4j基于对原生的线程池ThreadPoolExecutor做了一个增强,扩展了很多的功能。
-
全局管控 - 管理应用线程池实例。
-
动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等。
-
通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长。
-
运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示。
-
功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务。
-
容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更。
-
框架适配 - Dubbo、Hystrix、RabbitMQ、RocketMQ 等消费线程池运行时数据查看和线程数变更。
Hippo4j的Gitee地址:hippo4j: 🚀 异步线程池框架,支持线程池动态变更&监控&报警,无需修改代码轻松引入。
可以直接基于提供的演示地址去查看效果:Hippo4j Web
二、Hippo4j快速入门
首先Hippo4j有两个角色,一个Sever,一个Client
Server就是Hippo4j的图形化界面,监控都在里面
Client就是自己的工程,自己的项目,需要正常的引入Hippo4j的依赖,将构建线程池的方式更改为Hippo4j的要求的形式,再编写好各种配置文件即可。
2.1 安装Hippo4j-Server
Hippo4j-Server提供很多中安装方式,其中以Docker为核心去安装。
2.1.1 Docker方式安装
提供一个docker-compose.yml文件即可。
version: '3.1'
services:
hippo4j:
#镜像名称
image: hippo4j/hippo4j-server
#容器名称
container_name: hippo4j-server
ports:
- 6691:6691
environment:
#Mysql配置
- DATASOURCE_MODE=mysql
- DATASOURCE_HOST=127.0.0.1
- DATASOURCE_PORT=3306
- DATASOURCE_DB=hippo4j_manager
- DATASOURCE_USERNAME=
- DATASOURCE_PASSWORD=
docker-compose up -d启动即可
访问http://localhost:6691/index.html,默认用户名和密码为admin/123456

2.1.2 源码的方式安装
git地址:Releases · opengoofy/hippo4j · GitHub

2.1.2.1 启动前准备环境
Hippo4j-Server提供了两种数据源,可以采用MySQL,也可以采用H2。
这边咱们直接采用MySQL作为数据源。
找到指定的工程,准备环境

在指定的地址的MySQL中,提前构建出hippo4j_manager库

回到启动类,启动项目即可。

启动成功后,会自动根据resources中提供的SQL脚本生成库表

2.1.2.2 访问具体的Web界面
直接访问本地的6691端口即可。默认的用户名和密码依然是admin/123456

2.2 实现Hippo4j-Client
2.2.1 构建Hippo4j-Client(无中间件依赖)
首先需要准备一个SpringBoot工程。
导入Hippo4j的client依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>cn.hippo4j</groupId> <artifactId>hippo4j-spring-boot-starter</artifactId> <version>1.5.0</version> </dependency> </dependencies>
启动类追加注解
@EnableDynamicThreadPool
编写配置文件
spring:
application:
name: hippo4j-client
dynamic:
thread-pool:
# server 端的地址
server-addr: 127.0.0.1:6691
username: admin
password: 123456
namespace: test # 租户名称
item-id: ${spring.application.name} # 项目名称,需要与与服务名称保持一致。
配置线程池信息
/**
* 交给Hippo4j-Server管理的线程池
*/
@Configuration
public class ThreadPoolConfig {
@Bean
@DynamicThreadPool
public ThreadPoolExecutor threadPool(){
//采用线程池Builder去构建
ThreadPoolExecutor buildThreadPool = ThreadPoolBuilder.builder()
.corePoolSize(8)
.maximumPoolSize(8)
.keepAliveTime(5)
.timeUnit(TimeUnit.SECONDS)
.workQueue(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE)
.threadFactory("test")
.rejected(new ThreadPoolExecutor.AbortPolicy())
.threadPoolId("test")
.dynamicPool()
.build();
return buildThreadPool;
}
}
需要在Hippo4j的图形化界面上构建租户&项目


动态线程池
-
线程池管理: 这边可以将新注册上来的Hippo4j-Client中的线程池信息读取并且保存到数据库中,后期出现同样的线程池的标识的,直接按照当前数据库保存的配置信息走。 他无法动态修改。

-
线程池实例: 这个才是动态修改线程池配置信息的选项。

2.2.2 构建Hippo4j-Client(依赖配置中心)
依赖配置中心的方式和上面玩的无中间件依赖是两个套路。
其实区别在于:
-
依赖配置中心方式,可以不安装Hippo4j-Server,只需要在项目中导入好依赖,就可以实现线程池的动态配置刷新效果。 如果需要实现监控界面报表等内容,需要接入Prometheus和Grafana,成本也不低。
-
无中间件依赖,这种方式只需要额外安装部署Hippo4j-Server即可,功能相对依赖配置中心的更丰富。

2.3 Web容器线程池监控
tomcat这种Web容器的线程池,Hippo4j也可以实现监控,而且不需要额外的导入任何的依赖
为了更好的查看Hippo4j的动态修改效果,额外追加一个Controller查看效果
@GetMapping("/test")
public String test(){
System.out.println(Thread.currentThread().getName());
return "ok";
}
访问接口时,可以查看到处理Controller业务的线程是Tomcat的线程池中的线程信息

不需要额外的配置,在项目启动后,可以直接在Hippo4j的Server界面查看到监控的容器信息
同时Hippo4j也支持针对web容器的线程池的设置的动态修改

https://hippo4j.cn/docs/user_docs/user_guide/notify
144

被折叠的 条评论
为什么被折叠?



