大家好,动静线程池我的项目DynamicTp开源一个多月,目前400多star,阐明还是比拟受欢迎的,当初曾经有一些小伙伴在接入应用或者行将接入应用了,为了我的项目当前更好的倒退迭代,打算出几篇文章来对DynamicTp做一些更具体的介绍,有趣味的小伙伴欢送一起参加进来欠缺迭代我的项目。

背景啥的能够看前一篇文章介绍
美团动静线程池实际思路,开源了


我的项目地址

感激star,欢送pr,业务之余给开源奉献一份力量

gitee地址:https://gitee.com/yanhom/dynamic-tp

github地址:https://github.com/lyh200/dynamic-tp


系列文章

美团动静线程池实际思路,开源了

动静线程池(DynamicTp)之动静调整Tomcat、Jetty、Undertow线程池参数篇


代码构造

1.adapter模块:次要是适配一些第三方组件的线程池治理,目前曾经实现的有SpringBoot内置的三大web容器(Tomcat、Jetty、Undertow)的线程池治理,后续可能接入其余罕用组件的线程池治理。

2.common模块:次要是一些各个模板都会用到的类,解耦依赖,复用代码,大家日常开发中可能也常常会这样做。

3.core模块:该框架的外围代码都在这个模块里,包含动静调整参数,监控报警,以及串联整个我的项目流程都在此。

4.example模块:提供一个简略应用示例,不便使用者参照

5.logging模块:用于配置框架外部日志的输入,目前次要用于输入线程池监控指标数据到指定文件

6.starter模块:集成各个配置核心实现动静更新配置,目前曾经集成Nacos、Apollo两个支流配置核心,使用者也能够参照扩大其余配置核心实现,客户端应用也只需引入相应starter依赖就行。

能够看出,我的项目还是比较简单的,相当轻量。配置解析、报警平台、配置核心、监控数据输入、回绝策略等都提供有SPI接口供使用者扩大,高度可定制化(自定义实现也能够提PR合并到我的项目中供别人应用)。

集体还是有比拟强的代码洁癖的,所以代码这块也还是比拟洁净的(根本没有warning提醒),也大量应用一些设计模式优化代码构造,可读性还是比拟强的,能够一起交流学习。


对于扩大

1.扩大配置解析

目前反对的配置文件格式有yaml和properties,如果要扩大其余类型,参考其余两个实现继承AbstractConfigParser类,实现相应办法就行。

2.扩大报警平台

目前反对的报警平台有钉钉和企业微信,如果要扩大其余平台,参考其余两个实现继承AbstractNotifier类,实现相应办法就行。

3.扩大监控数据输入

目前监控指标数据反对以JsonLog输入到指定地位和MicroMeter采集两种形式,如果要扩大其余实现,参考其余两个实现继承AbstractCollector类,实现相应办法,而后把配置文件中的collectorType字段配置该类型就行

4.扩大配置核心

目前反对的配置核心有Nacos和Apollo两种,如果要扩大其余实现,比方ZK、Consul等能够参考其余两个实现继承AbstractRefresher类,实现相应办法就行


源码怎么读

对源码感兴趣的敌人能够从DtpRegistry这个类动手去读

围绕注册、获取、刷新这三个外围api去跟代码

注册

注册有两处,都是在spring容器启动时在Bean创立的不同阶段执行,对spring不相熟的小伙伴轻易能够去浏览下spring创立bean的源码,代码里也大量应用了spring的事件机制做代码解耦

1.spring容器启动时DtpPostProcessor会去注册在代码中通过@Bean申明的线程池实例

2.afterPropertiesSet办法会拉去配置核心配置的线程池而后实例化

刷新

配置核心的listener监听到配置文件的变动后,解析配置文件,而后告诉DtpRegistry去更新线程池配置,完之后发送变更告诉到配置的平台

监控

服务启动后启动一个定时器去做监控报警,能够看DtpMonitor这个类

报警

报警这块代码做了一些形象设计,使用了像模板办法模式等,代码可读性还是挺强的

看完代码之后你就会发现其实我的项目挺简略的,然而实用啊,外围代码也就是在除夕那三天写的。


接入应用

倡议在配置核心单开一个配置文件,配置文件名称配置到相应字段上。

因为代码始终在迭代中,公布的maven依赖可能不是最新的,线上要应用时能够找我确认下依赖版本。

具体应用步骤上篇文章有讲,能够去看
美团动静线程池实际思路,开源了

这个我的项目我感觉最大的长处也就是轻量,因为各个公司应用的组件体系都可能不太一样,所以留有足够多的扩大点让本人来扩大。上面一节次要介绍集成prometheus+grafana做监控


监控

这块要讲的是集成prometheus+grafana做监控,当时你得装置好prometheus+grafana,这个就不开展讲了,网上教程很多,测试应用能够间接用docker装置,非常简单。

1.首先配置文件中开启micrometer数据采集

   enabledCollect: true   collectorType: micrometer

2.我的项目中引入prometheus依赖,留神可能有版本不兼容问题,我测试遇到过

  <dependency>      <groupId>io.micrometer</groupId>      <artifactId>micrometer-registry-prometheus</artifactId>      <version>1.8.3</version>  </dependency>

3.开启prometheus指标采集端点

management:  metrics:    export:      prometheus:         enabled: true  endpoints:    web:      exposure:        include: '*'   # 线上最初不要*

4.配置prometheus数据采集job,这块能够去理解下他的SD机制(Service Discovery),也就是主动到配置核心发现服务,看你所用的配置核心支不反对这种形式,能够去官网查看,如同是不反对nacos的,但能够去github看有没有他人提供的实现,ZK,Eureka、Consul这些是反对的。这里应用static_configs形式,简略的指定地址的动态配置

- job_name: 'dynamic-tp'    metrics_path: '/actuator/prometheus'    static_configs:      - targets: ['192.168.2.104:9098']

job配置后prometheus治理台看到如下图所示,阐明曾经开始失常采集指标配置

5.而后就是配置grafana数据可视化,配置如下图,须要该panel配置Json的能够加我发你,到这里监控就搭建起来了,其实也很简略,而后就能够实时监控线程池数据指标变动了


分割我

对我的项目有什么想法或者倡议,能够加我微信交换,或者创立issues,一起欠缺我的项目

公众号:CodeFox

微信:yanhom1314