很多小伙伴知道小编从今年六月份开始,陆陆续续开始提交 Hippo4J 动态线程池项目

经过 200+ 的 Commit,也是快要能发布 1.0.0 正式版本,今天就写一篇文章正式介绍下 Hippo4J 的项目架构

Hippo4J GitHub:https://github.com/acmenlt/dynamic-threadpool

小伙伴如果访问 GitHub 速度慢,可以通过改 Host 的方式提高访问速度,修改 Host 方案

1. 架构设计


简单来说,Hippo4J 从部署的角度上分为两种角色:Server 端和 Client 端

Server 端是 Hippo4J 项目打包出的 Java 进程,功能包括用户权限、线程池监控以及执行持久化的动作

Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar 包负责与 Server 端进行交互

比如拉取 Server 端线程池数据、动态更新线程池配置以及采集上报线程池运行时数据等

2. 基础组件


2.1 配置中心(Config)

配置中心位于 Server 端,它的主要作用是监控 Server 端线程池配置变更,实时通知到 Client 实例执行线程池变更流程

代码设计基于 Nacos 1.x 版本的 长轮询以及异步 Servlet 机制 实现

2.2 注册中心(Discovery)

负责管理 Client 端(单机或集群)注册到 Server 端的实例,包括不限于实例注册、续约、过期剔除 等操作,代码基于 Eureka 源码实现

上面的配置中心很容易理解,动态线程池参数变更的根本。但是注册中心是用来做什么的?

注册中心管理 Client 端注册的实例,通过这些实例可以 实时获取线程池的运行时参数信息

目前的设计是如此,不排除后续基于 Discovery 做更多的扩展

2.3 控制台(Console)

对接前端项目,包括不限于以下模块管理

2.4 抽象工具(Tools)

顾名思义就是将某些工具单独抽象出来,并以 Module 的形式进行展现,这样的拆分方式有两点好处:一是更符合职责分离特性,二是需要用到某块功能,做到拿来即用

目前已集成两块内容:

  1. log-record-tool:基于 mzt-biz-log 的操作日志变更记录组件
  2. open-change-tool:监控 Hippo4J 项目在 GitHub 的 Star Fork 变更,默认五分钟内有变更则通知

3. 消息通知(Notify)


Hippo4J 内置了很多需要通知的事件,比如:线程池参数变更通知、线程池活跃度报警、拒绝策略执行报警以及阻塞队列容量报警等

目前 Notify 已经接入了钉钉,后续持续集成企业微信、邮件、短信等通知渠道;并且,Notify 模块提供了消息事件的 SPI 方案,可以接受三方自定义的推送

4. Hippo4j-Spring-Boot-Starter


熟悉 SpringBoot 的小伙伴对 Starter 应该不会陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在应用内,负责与 Server 端完成交互

Starter Jar 包推送到 Maven 公共仓库,目前公共仓库已存在 0.0.2 版本的 Jar

5. SpringBoot 快速开始


5.1 Server 端启动

导入 Hippo4J 初始化 SQL 语句

Hippo4J 代码拉至本地,启动 Server 模块下 ServerApplication 应用类

5.2 SpringBoot 引入 Hippo4j Starter

SpringBoot 应用引入 Hippo4j Starter Jar。备注:0.0.2 版本仅是过渡期版本,正式请等待发布 1.0.0

<dependency><groupId>io.github.acmenlt</groupId><artifactId>hippo4j-spring-boot-starter</artifactId><version>0.0.2</version>
</dependency>

SpringBoot 应用添加 Hippo4J 相关配置文件:

spring:profiles:active: devapplication:name: dynamic-threadpool-exampledynamic:thread-pool:notifys:- type: DINGurl: https://oapi.dingtalk.com/robot/send?access_token=# 此处可以选择自己的钉钉群token: 4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae# 通知时 @ 人员receives: '15601166691'# 报警发送间隔alarm-interval: 30# 服务端地址server-addr: http://localhost:6691# 租户 id, 对应 tenant 表namespace: prescription# 项目 id, 对应 item 表item-id: ${spring.application.name}

添加线程池配置类,动态线程池支持两种创建方式

  1. DynamicThreadPoolWrapper 包装器创建,指定线程池标识
  2. @DynamicThreadPool 注解修饰 Spring Bean

Spring 后置处理器会扫描这两种方式创建的 Bean,拿到线程池 ID 调用 Server 端获取配置

如果获取 Server 端配置失败,根据默认线程池创建实例

@Configuration
public class ThreadPoolConfig {public static final String MESSAGE_PRODUCE = "message-produce";public static final String MESSAGE_CONSUME = "message-consume";@Bean// {@link DynamicThreadPoolWrapper} 完成 Server 端订阅配置功能.public DynamicThreadPoolWrapper messageCenterDynamicThreadPool() {return new DynamicThreadPoolWrapper(MESSAGE_CONSUME);}@Bean@DynamicThreadPool// 通过 {@link DynamicThreadPool} 修饰 {@link DynamicThreadPoolExecutor} 完成 Server 端订阅配置功能.// 由动态线程池注解修饰后, IOC 容器中保存的是 {@link DynamicThreadPoolExecutor}public ThreadPoolExecutor dynamicThreadPoolExecutor() {return ThreadPoolBuilder.builder().threadFactory(MESSAGE_PRODUCE).dynamicPool().build();}
}

启动 SpringBoot 应用后,动态线程池的准备工作就算完成了

5.3 测试线程池动态变更

通过接口修改线程池中的配置。HTTP POST 路径:http://localhost:6691/v1/cs/configs ,Body 请求体如下:

{"ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改","tenantId": "prescription","itemId": "dynamic-threadpool-example","tpId": "message-produce","coreSize": 10,"maxSize": 15,"queueType": 9,"capacity": 100,"keepAliveTime": 10,"rejectedType": 3,"isAlarm": 0,"capacityAlarm": 81,"livenessAlarm": 82
}

接口调用成功后,观察 IDEA Client 控制台日志输出,日志输出包括不限于此信息即为成功

[												

给你介绍下,Hippo4J 动态线程池基础架构相关推荐

  1. 借鉴美团文章实现的动态线程池,已开源

    大家好, 我是龙台 给自己定了个小目标,hippo4j 年底达到 1k star! GitHub:https://github.com/acmenlt/dynamic-threadpool Site: ...

  2. 美团:某动态线程池框架是官方开源的么?

    大家好,我是马称. 最近,有很多同学在微信上问我这么一个问题: Hippo4j 动态线程池框架是美团开源的么? 类似于这样的问题还挺多,在这里统一回复下: 美团官方并没有开源任何关于动态线程池的框架. ...

  3. Hippo4j和DynamicTp动态线程池介绍和使用中遇到的坑

    文章目录 @[toc] 1.前言 1.1Dromara致力于微服务云原生解决方案的组织 1.2 动态线程池的思路 1.3Hippo4j和DynamicTp动态线程池解决什么痛点 2.介绍 2.1Hip ...

  4. 【开源项目】动态线程池框架Hippo4j源码解析

    动态线程池框架Hippo4j源码解析 项目简介 Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力. 快速开始 https://hippo4 ...

  5. 轻量级动态线程池才是“王道”?

    一.前言 最初设计 Hippo4j 的初衷是尽可能提高以及保障线程池对于线上应用的作用,所以加了很多个性化功能,这也间接导致强依赖 Hippo4j Server 项目. 自 Hippo4j 1.0.0 ...

  6. apollo源码分析 感知_Kitty中的动态线程池支持Nacos,Apollo多配置中心了

    目录 回顾昨日 nacos 集成 Spring Cloud Alibaba 方式 Nacos Spring Boot 方式 Apollo 集成 自研配置中心对接 无配置中心对接 实现源码分析 兼容 A ...

  7. 美团动态线程池实践思路开源项目(DynamicTp),线程池源码解析及通知告警篇

    大家好,这篇文章我们来聊下动态线程池开源项目(DynamicTp)的通知告警模块.目前项目提供以下通知告警功能,每一个通知项都可以独立配置是否开启.告警阈值.告警间隔时间.平台等,具体代码请看core ...

  8. Kitty中的动态线程池支持Nacos,Apollo多配置中心了

    目录 回顾昨日 nacos集成 Spring Cloud Alibaba 方式 Nacos Spring Boot 方式 Apollo集成 自研配置中心对接 无配置中心对接 实现源码分析 兼容Apol ...

  9. 美团动态线程池实践思路,开源了

    大家好,今天我们来聊一个比较实用的话题,动态可监控的线程池实践,全新开源项目(DynamicTp)地址在文章末尾,欢迎交流学习. 写在前面 稍微有些Java编程经验的小伙伴都知道,Java的精髓在ju ...

最新文章

  1. python绘制盖尔圆并做特征值的隔离
  2. RAC安装时需要执行4个脚本及意义
  3. ocelot和nginx比较_nginx + ocelot+.net core signalr 关于websocket无法正常握手的问题
  4. LeetCode OJ - Valid Palindrome
  5. 软件架构设计_软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧...
  6. Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding'
  7. 云计算解决方案--百度文库
  8. 全国计算机一级2021选择题,2021年度全国计算机一级考试选择题试题与详细答案.doc...
  9. 各历史版本NDK下载地址
  10. 秒读小说app带源码,开源阅读软件app,开源小说阅读app源码
  11. 证件照处理:一寸照片换底色
  12. UVa 12911 Subset Sum
  13. 【小程序开发】ios中时间显示为NaNNaN
  14. 查看笔记本预装系统的产品密钥
  15. 用一行`CSS`实现10种布局
  16. Zotero 知网文章不能转成pdf 的解决办法。
  17. 【区块链 | AAVE】一文讲清-DeFI王者AAVE最新的稳定币GHO提案
  18. Java-dao模式
  19. SLCP验厂辅导,SLCP验证员必须遵守验证协议中的验证规则以确保数据的质量和完整性
  20. 使用python实现图像对比度增强

热门文章

  1. SIFT的两个版本:OpenCV和VL_SIFT
  2. .net使用DotNetCharting控件生成报表统计图总结
  3. 富可视m310 android 4.4,精致外观高清屏四核机 富可视M310评测
  4. 《缠中说禅108课》75:逗庄家玩的一些杂史 1
  5. linux路由配置秘籍,linux常用命令总结
  6. ashx 设置session、emial发送方法
  7. 淘宝铺货上传商品API文档
  8. 酒店卫生问题频起 MobData公布酒店行业最新用户画像 携程用户最有钱
  9. ubuntu中搜狗输入法安装及乱码
  10. 河北丰宁洪汤寺隧道打响进洞施工第一炮