Update official website documents

pull/650/head
chen.ma 2 years ago
parent df24d11ba8
commit 8d9616a363

@ -32,7 +32,7 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
- 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长;
- 运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示;
- 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务;
- 多种模式 - 内置两种使用模式:[依赖配置中心](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-core-start) 和 [无中间件依赖](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-server-start)
- 多种模式 - 内置两种使用模式:[依赖配置中心](https://hippo4j.cn/docs/user_docs/getting-started/config/hippo4j-core-start) 和 [无中间件依赖](https://hippo4j.cn/docs/user_docs/getting-started/server/hippo4j-server-start)
- 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更;
- 中间件适配 - Apache RocketMQ、Dubbo、RabbitMQ、Hystrix 消费线程池运行时数据查看和线程数变更。
@ -52,16 +52,14 @@ Hippo-4J 获得了一些宝贵的荣誉,肯定了 Hippo-4J 作为一款开源
<img align="center" width="680" alt="image" src="https://user-images.githubusercontent.com/77398366/187014905-b50bdc8b-ca0e-4137-9a02-1e6b06106191.jpg">
## 开发者
Hippo-4J 获得的成就属于每一位对 Hippo-4J 做出过贡献的成员,感谢各位的贡献
Hippo-4J 获得的成就属于每一位对 Hippo-4J 做出过贡献的成员,感谢各位的付出
如果屏幕前的同学有意提交 Hippo-4J请参考 [good first issue](https://github.com/opengoofy/hippo4j/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 或者 [good pro issue](https://github.com/opengoofy/hippo4j/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+pro+issue%22) 任务列表。
<a href="https://github.com/opengoofy/hippo4j/graphs/contributors"><img src="https://opencollective.com/hippo4j/contributors.svg?width=890&button=false" /></a>
## 友情链接
- [[ Sa-Token ]](https://github.com/dromara/sa-token):一个轻量级 java 权限认证框架,让鉴权变得简单、优雅!
@ -72,7 +70,6 @@ Hippo-4J 获得的成就属于每一位对 Hippo-4J 做出过贡献的成员,
- [[ toBeBetterJavaer ]](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的 Java 学习指南。
## 联系我
![image](https://user-images.githubusercontent.com/77398366/185774220-c11951f9-e130-4d60-8204-afb5c51d4401.png)

@ -6,7 +6,9 @@ sidebar_position: 1
Git Commit Log 尽量使用英文。
为了让您的 ID 显示在 Contributor 列表中,别忘了以下设置:
Pull Request 尽量保持单一,不同语义的代码贡献应拆分多个 Pull Request。
为了让您的 GitHub ID 显示在 Contributor 列表中,别忘了以下设置:
```shell
git config --global user.name "username"

@ -12,8 +12,10 @@ sidebar_position: 4
感谢给予支持的朋友,您的支持是我前进的动力 🎉
| | ID | 赞赏金额 | 时间 | 备注 |
|-----| ------- | ---- | ---------- | ------------------------------------ |
| 1 | 六月飞雪 | 30.00 | 2021-12-30 | 代码设计很优雅的一款框架,继续加油! |
| 2 | 孙大圣 | 26.6 | 2022-03-23 | 学习一下😁😁 |
| 3 | Easy 点 | 66.00 | 2022-04-09 | 好货好技术当加赏 |
| | ID | 赞赏金额 | 时间 | 备注 |
|-----|--------|-------|------------|--------------------|
| 1 | 六月飞雪 | 30.00 | 2021-12-30 | 代码设计很优雅的一款框架,继续加油! |
| 2 | 孙大圣 | 26.6 | 2022-03-23 | 学习一下😁😁 |
| 3 | Easy 点 | 66.00 | 2022-04-09 | 好货好技术当加赏 |
| 4 | 捷克 | 30.00 | 2022-05-21 | 非常不错的框架,点赞 |
| 5 | 吃猫的饼干 | 88.00 | 2022-08-21 | 👍 |

@ -0,0 +1,5 @@
{
"label": "依赖配置中心",
"position": 2,
"collapsed": true
}

@ -2,7 +2,7 @@
sidebar_position: 2
---
# hippo4j config 线程池监控
# 线程池监控
已完成 hippo4j-config 的 [接入工作](/docs/user_docs/getting-started/hippo4j-core-start) 。

@ -2,9 +2,9 @@
sidebar_position: 1
---
# hippo4j config 接入
# 接入流程
Nacos、Apollo、Zookeeper 配置中心任选其一。
Nacos、Apollo、Zookeeper、ETCD 配置中心任选其一。
## hippo4j 配置
@ -191,56 +191,3 @@ private ThreadPoolExecutor messageProduceDynamicExecutor;
messageProduceDynamicExecutor.execute(() -> xxx);
```
## ThreadPoolTaskExecutor 适配
Spring 针对 JDK 线程池提供了增强版的 `ThreadPoolTaskExecutor`Hippo4J 对此进行了适配。
```java
package cn.hippo4j.example;
import cn.hippo4j.core.executor.DynamicThreadPool;
import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockIngQueue;
import cn.hippo4j.core.executor.support.ThreadPoolBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Configuration
public class ThreadPoolConfig {
@Bean
@DynamicThreadPool
public ThreadPoolExecutor dynamicThreadPoolExecutor() {
String threadPoolId = "message-consume";
ThreadPoolExecutor dynamicExecutor = ThreadPoolBuilder.builder()
.threadFactory(threadPoolId)
.threadPoolId(threadPoolId)
.corePoolSize(5)
.maxPoolNum(10)
.workQueue(new ResizableCapacityLinkedBlockIngQueue(1024))
.rejected(new ThreadPoolExecutor.AbortPolicy())
.keepAliveTime(6000, TimeUnit.MILLISECONDS)
// 等待终止毫秒
.awaitTerminationMillis(5000)
// 线程任务装饰器
.taskDecorator((task) -> {
String placeholderVal = MDC.get("xxx");
return () -> {
try {
MDC.put("xxx", placeholderVal);
task.run();
} finally {
MDC.clear();
}
};
})
.dynamicPool()
.build();
return dynamicExecutor;
}
}
```

@ -2,7 +2,7 @@
sidebar_position: 0
---
# hippo4j 的两种使用模式
# 运行模式介绍
1.1.0 版本发布后Hippo-4J 分为两种使用模式:轻量级依赖配置中心以及无中间件依赖版本。

@ -2,7 +2,7 @@
sidebar_position: 6
---
# hippo4j 三方框架线程池适配
# 三方框架线程池适配
Hippo4J 目前已支持的三方框架线程池列表:

@ -0,0 +1,5 @@
{
"label": "无中间件依赖",
"position": 3,
"collapsed": true
}

@ -2,7 +2,7 @@
sidebar_position: 4
---
# hippo4j server 服务端配置
# 服务端配置
`hippo4j.core.clean-history-data-enable`

@ -2,7 +2,7 @@
sidebar_position: 3
---
# hippo4j server 接入
# 接入流程
部署服务端,参考 [部署手册](/docs/user_docs/ops/hippo4j-server-deploy)。
@ -127,55 +127,3 @@ private ThreadPoolExecutor messageProduceDynamicExecutor;
messageProduceDynamicExecutor.execute(() -> xxx);
```
## ThreadPoolTaskExecutor 适配
Spring 针对 JDK 线程池提供了增强版的 `ThreadPoolTaskExecutor`Hippo4J 对此进行了适配。
```java
package cn.hippo4j.example;
import cn.hippo4j.core.executor.DynamicThreadPool;
import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockIngQueue;
import cn.hippo4j.core.executor.support.ThreadPoolBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Configuration
public class ThreadPoolConfig {
@Bean
@DynamicThreadPool
public ThreadPoolExecutor dynamicThreadPoolExecutor() {
String threadPoolId = "message-consume";
ThreadPoolExecutor dynamicExecutor = ThreadPoolBuilder.builder()
.threadFactory(threadPoolId)
.threadPoolId(threadPoolId)
.corePoolSize(5)
.maxPoolNum(10)
.workQueue(new ResizableCapacityLinkedBlockIngQueue(1024))
.rejected(new ThreadPoolExecutor.AbortPolicy())
.keepAliveTime(6000, TimeUnit.MILLISECONDS)
// 等待终止毫秒
.awaitTerminationMillis(5000)
// 线程任务装饰器
.taskDecorator((task) -> {
String placeholderVal = MDC.get("xxx");
return () -> {
try {
MDC.put("xxx", placeholderVal);
task.run();
} finally {
MDC.clear();
}
};
})
.dynamicPool()
.build();
return dynamicExecutor;
}
}
```

@ -28,7 +28,7 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
## 快速开始
对于本地演示目的,请参阅 [Quick start](getting-started/hippo4j-server-start)
对于本地演示目的,请参阅 [Quick start](docs/user_docs/getting_started/hippo4j-server-start)
演示环境:
- [http://console.hippo4j.cn/index.html](http://console.hippo4j.cn/index.html)

@ -41,11 +41,11 @@ docker run -p 6691:6691 --name hippo4j-server -d hippo4j-server:{指定版本}
* 暂时只暴露以下参数
* MYSQL_HOST、MYSQL_PORT、MYSQL_DB、MYSQL_USERNAME、MYSQL_PASSWORD
*/
docker run -p 6691:6691 --name hippo4j-server \
docker run -d -p 6691:6691 --name hippo4j-server \
-e MYSQL_HOST=127.0.0.1 \
-e MYSQL_PORT=3306 \
-e MYSQL_DB=hippo4j_manager \
-e MYSQL_USERNAME=root \
-e MYSQL_PASSWORD=mysql \
-d hippo4j-server
-e MYSQL_PASSWORD=root \
hippo4j-server
```

@ -1,5 +1,5 @@
{
"label": "用户手册",
"label": "用户指南",
"position": 2,
"link": {
"type": "generated-index",

@ -2,7 +2,7 @@
sidebar_position: 1
---
# 为什么写这个框架
# 为什么写
[美团线程池文章](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html "美团线程池文章") 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警等功能。
@ -20,10 +20,21 @@ sidebar_position: 1
虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决。
- **原生线程池创建时无法合理评估参数问题**。比如功能使用到线程池遇到突发流量洪峰频繁拒绝任务。Hippo4J 提供动态修改参数功能,**避免修改线程池参数后重启线上应用**
- 当线程池运行过程中无法再接受新的任务,此时你想知道 **线程池内线程都在做什么**Hippo4J 提供查看线程池堆栈功能;
- 某接口频繁超时,内部依赖线程池执行,想要 **查看过去一段时间线程池运行参数情况**。Hippo4J 提供历史数据图表查看功能;
- **原生线程池无任务报警策略**。Hippo4J 内置四种报警策略,分别是:活跃度报警、队列容量报警、拒绝策略报警和运行时间过长报警。
- 线程池随便定义,线程资源过多,造成服务器高负载。
- 线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险。
- 线程池任务执行时间超过平均执行周期,开发人员无法感知。
- 线程池任务堆积,触发拒绝策略,影响既有业务正常运行。
- 当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起。
- 原生线程池不支持运行时变量的传递,比如 MDC 上下文遇到线程池就 GG。
- 无法执行优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃。
- 线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手。
Hippo4J 很好解决了这些问题,它将业务中所有线程池统一管理,增强原生线程池系列功能。
@ -39,10 +50,11 @@ Hippo4J 除去动态修改线程池,还包含实时查看线程池运行时指
- `hippo4j-auth`:用户、角色、权限等;
- `hippo4j-common`:多个模块公用代码实现;
- `hippo4j-config`:提供线程池准实时参数更新功能;
- `hippo4j-console`:对接 Web 前端项目
- `hippo4j-console`:对接前端控制台
- `hippo4j-core`:核心的依赖,包括配置、核心包装类等;
- `hippo4j-discovery`:提供线程池项目实例注册、续约、下线等功能;
- `hippo4j-example` :示例工程;
- `hippo4j-server` :聚合 Server 端发布需要的模块;
- `hippo4j-spring-boot`:负责与 Server 端交互的依赖组件;
- `hippo4j-tool` :操作日志等组件代码。
- `hippo4j-message` :配置变更以及报警通知发送;
- `hippo4j-monitor` :线程池运行时监控;
- `hippo4j-server` Server 端发布需要的模块聚合;
- `hippo4j-spring-boot`SpringBoot Starter。

@ -2,7 +2,7 @@
sidebar_position: 2
---
# 架构设计介绍
# 架构设计
简单来说Hippo4J 从部署的角度上分为两种角色Server 端和 Client 端。
@ -20,7 +20,6 @@ Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar
代码设计基于 Nacos 1.x 版本的 **长轮询以及异步 Servlet 机制** 实现。
### 注册中心Discovery
负责管理 Client 端(单机或集群)注册到 Server 端的实例,包括不限于**实例注册、续约、过期剔除** 等操作,代码基于 Eureka 源码实现。
@ -31,7 +30,6 @@ Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar
目前的设计是如此,不排除后续基于 Discovery 做更多的扩展。
### 控制台Console
对接前端项目,包括不限于以下模块管理:
@ -44,7 +42,6 @@ Hippo4J 内置了很多需要通知的事件,比如:线程池参数变更通
目前 Notify 已经接入了钉钉、企业微信和飞书后续持续集成邮件、短信等通知渠道并且Notify 模块提供了消息事件的 SPI 方案,可以接受三方自定义的推送。
## Hippo4j-Spring-Boot-Starter
熟悉 SpringBoot 的小伙伴对 Starter 应该不会陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在应用内,负责与 Server 端完成交互。
@ -52,4 +49,3 @@ Hippo4J 内置了很多需要通知的事件,比如:线程池参数变更通
## 功能架构
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211105230953626.png)

@ -0,0 +1,4 @@
{
"label": "通知报警",
"position": 4
}

@ -2,17 +2,11 @@
sidebar_position: 4
---
# 参数变更 & 报警通知
# 通知报警
:::tip
现阶段已集成钉钉、企业微信、飞书的消息推送,后续会持续接入邮箱、短信和自定义通知渠道。
:::
## 创建通知
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220109000449862.png)
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220904181527453.png)
**通知平台**
@ -47,27 +41,31 @@ WECHART填写user_id会以@的消息发给用户,填写姓名则是普通
LARK填写ou_开头用户唯一标识会以@的消息发给用户,填写手机号则是普通的@
```
## 钉钉平台
[钉钉创建群机器人](https://www.dingtalk.com/qidian/help-detail-20781541.html)
| 配置变更 | 报警通知 |
| :---: | :---: |
| ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211013122816688.png) | ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211013113649068.png) |
### 自定义关键词
添加钉钉机器人后,需在机器人配置自定义关键字,才可发送成功。如下所示:
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220530200133377.png?x-oss-process=image/resize,h_500,w_800)
## 企业微信
[企业微信创建群机器人](https://open.work.weixin.qq.com/help2/pc/14931?person_id=1&from=homesearch)
| 配置变更 | 报警通知 |
| :---: | :---: |
| ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211203213443242.png) | ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211203213512019.png) |
## 飞书平台
[飞书创建群机器人](https://www.feishu.cn/hc/zh-CN/articles/360024984973)
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220304081729347.png)
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220304081507907.png)

@ -2,28 +2,40 @@
sidebar_position: 3
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# 快速开始
:::tip
Hippo4J 支持两种运行模式依赖配置中心Hippo4J-Config或 Hippo4J Server下文描述接入 Hippo4J
Server[Hippo4J-Config 接入参考此处](/docs/user_docs/getting-started/hippo4j-core-start.md) 。
:::
## 服务启动
1MySQL 创建名为 `hippo4j_manager` 的数据库,字符集选择 `utf8mb4`,并导入 [Hippo4J 初始化 SQL 语句](https://github.com/longtai-cn/hippo4j/blob/develop/hippo4j-server/conf/hippo4j_manager.sql)。
2接下来启动服务端提供两种启动方式Docker 运行以及编译源码运行。
## 如何运行 Demo
```shell
docker run -d -p 6691:6691 --name hippo4j-server \
-e MYSQL_HOST=localhost \
-e MYSQL_PORT=3306 \
-e MYSQL_DB=hippo4j_manager \
-e MYSQL_USERNAME=root \
-e MYSQL_PASSWORD=root \
hippo4j-server
```
> 如果使用源码编译的方式,启动 [Hippo4J-Server](https://github.com/longtai-cn/hippo4j/tree/develop/hippo4j-server) 模块下 ServerApplication 应用类。
Clone Hippo4J [源代码](https://github.com/longtai-cn/hippo4j),导入初始化 SQL 语句并运行示例程序。
3启动 [hippo4j-spring-boot-starter-example](https://github.com/opengoofy/hippo4j/tree/develop/hippo4j-example/hippo4j-spring-boot-starter-example) 模块下 Hippo4JServerExampleApplication 应用类
1. 导入 [Hippo4J 初始化 SQL 语句](https://github.com/longtai-cn/hippo4j/blob/develop/hippo4j-server/conf/hippo4j_manager.sql)
2. 启动 [Hippo4J-Server](https://github.com/longtai-cn/hippo4j/tree/develop/hippo4j-server) 模块下 ServerApplication 应用类;
3. 启动 [hippo4J-spring-boot-starter-example](https://github.com/opengoofy/hippo4j/tree/develop/hippo4j-example/hippo4j-spring-boot-starter-example) 模块下 Hippo4JServerExampleApplication 应用类。
访问 Server 控制台,路径 `http://localhost:6691/index.html`默认用户名密码admin / 123456
通过 Server 控制台访问,路径:`http://localhost:6691/index.html#/hippo4j/dynamic/thread-pool/instance`。
## 配置变更
默认用户名密码admin / 123456
访问控制台动态线程池菜单下线程池实例,修改动态线程池相关参数。
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220813173811668.png)
修改相关参数, 观察 Hippo4j-Example 控制台日志输出,日志输出包括不限于此信息即为成功。
观察 Hippo4j-Example 控制台日志输出,日志输出包括不限于此信息即为成功。
```tex
2022-08-13 21:26:25.814 INFO 38972 --- [change.config-5] c.h.s.s.c.ServerThreadPoolDynamicRefresh : [message-consume] Dynamic thread pool change parameter.
@ -37,5 +49,3 @@ Clone Hippo4J [源代码](https://github.com/longtai-cn/hippo4j),导入初始
```
另外,当 Client 集群部署时,可以修改某一个实例,或选择 `全部修改` 按钮,修改所有实例线程池信息。
线程池参数动态变更通知,或线程池运行时报警,详情参考 [通知报警](/docs/user_docs/user_guide/alarm.md)。

Loading…
Cancel
Save