首页 > 其他分享 >开源利器推荐:美团动态线程池框架的接入分享及效果展示

开源利器推荐:美团动态线程池框架的接入分享及效果展示

时间:2023-10-23 14:32:57浏览次数:39  
标签:DynamicTp 接入 美团 配置 开源 线程 参数 动态


开源利器推荐:美团动态线程池框架的接入分享及效果展示_spring

一款美团动态线程池的框架DynamicTp终于开源了,接入简单,侵入性也不强,支持的接入方式也多,总体还是很不错的。我认为尤其适合中小企业SpringBoot应用接入,是一款线程池监控的利器。

前言

蛮早前有些过关于线程池的使用及参数的一些参考配置,有兴趣的可以翻看以前的博文,但终究无法解决线程池的动态监控和实时修改。

以前读过美团早期发布的动态线程池框架的思路相关文章,但想要独自实现不是一件容易的事。

去年,一款美团动态线程池的框架DynamicTp终于开源了,因此我有尝试使用一下,发现接入简单,侵入性也不强,支持的接入方式也多,总体还是很不错的。

我认为尤其适合中小企业SpringBoot应用接入,是一款线程池监控的利器。

介绍

DynamicTp官网:https://dynamictp.cn/

开源利器推荐:美团动态线程池框架的接入分享及效果展示_java_02

架构图

开源利器推荐:美团动态线程池框架的接入分享及效果展示_线程池_03

下面,我把一个非配置中心的接入案例分享给大家,配置中心接入方式大同小异。

正文

使用的是最新版本1.1.3

1、引入依赖

开源利器推荐:美团动态线程池框架的接入分享及效果展示_java_04

2、yml配置

核心配置就是图中红色说明的报警配置和线程池参数配置

开源利器推荐:美团动态线程池框架的接入分享及效果展示_官网_05

这是紧接着上面的邮件告警配置,除了邮件方式还有其他很多方式,具体可参考官网,个人项目更推荐邮件方式,接入最简单。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_spring_06

3、测试

定义一个接口,使用Hutool提供的并发模拟工具类,这里先设置线程数200。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_spring_07

在service中注入一个线程池,默认名称regExecutor,和yml配置中定义的刚好对应上。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_java_08

这个接口的逻辑很简单,就是模拟并发场景下使用线程池的效果。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_java_09

4、效果

执行接口看下效果,发现一切正常,没有任何告警。

这是因为我们yml中配置的线程池参数可以承受测试时设置的200个线程数。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_springboot_10

那么,我们把测试接口的线程数设置成500再看看。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_官网_11

执行后,可以看到,DynamicTp已经触发了告警,并且提示邮件发送成功。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_spring_12

我用的QQ邮箱,发现通知也收到了。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_官网_13

点开后,可以看到DynamicTp提供的详细的线程池监控告警通知。

开源利器推荐:美团动态线程池框架的接入分享及效果展示_spring_14

可以看到,报警类型是reject,表示线程被拒绝,并且展示出了线程池参数的配置,以及拒绝策略,和拒绝的任务数量。

其中,拒绝任务数量达到了250个,计算一下我们配置的参数,核心8,最大50,队列容量200。

并发场景下,该配置实际最大容量确实是250,而我们测试传入的线程数是500,被拒绝250,刚好符合。

这样,我们根据被拒绝的任务数量,就可以动态调整参数,比如扩大队列容量,或者提高核心线程数的上限等等,甚至是调整拒绝策略为调用者线程继续执行。

这都要根据具体业务场景来区分,到底是IO密集型还是CPU密集型,关于这个可以参考我其他的博文。

总结

总之,DynamicTp的接入是很简单的,而且社区在不断完善,目前Gitee上能找到的关注度稍高的动态线程池框架其实就两个,只要学会使用一个就够用了,思想没有太多区别。

这个案例我并没有展示动态修改参数的效果,因为这种场景一般是分布式环境下接入比较适合,比如接入了nacos配置中心,那么DynamicTp也提供了对接方案。

想要文中的完整案例代码来测试效果的,可以自己下载哈。


喜欢的xdm,可以【点个赞】,【收藏一下】以备不时之需,更可以【关注下我】,本人持续输出干货,分享工作中的一些实践经验。


标签:DynamicTp,接入,美团,配置,开源,线程,参数,动态
From: https://blog.51cto.com/u_15780184/7987165

相关文章

  • 《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌
     视频版:https://www.bilibili.com/video/BV1ju4y1D7A8/1、开源12导联便携心电仪https://voltagedivide.com/2017/10/14/psoc-design-and-implementation-of-a-12-lead-portable-ecg/这个开源有完整的上位机,下位机和原理图,并且有一个详细的设计论文。12导联心电图是心电图检查中常......
  • 杰哥教你面试之一百问系列:java多线程
    java多线程是java面试中的高频问题,如何才能在面试中脱颖而出呢?熟读这里的一百个java多线程面试问题即可。1.什么是线程?什么是进程?回答:线程是操作系统能够进行调度的最小执行单位,它包含在进程中,共享进程的资源。进程是一个正在执行中的程序,它包含了代码、数据和系统资源。一个进程......
  • 笔记:Qt开发之多线程同步互斥机制
    目标:了解Qt多线程开发中常用的同步互斥类,使用场景和特点 实现线程互斥和同步常用的类互斥锁:QMute、QMutexLocker条件变量:QWaitCondition信号量:QSemaphore读写锁:QReadLocker、QWriteLocker、QReadWriteLock 1,QMutex特点:QMutex是Qt框架提供的互斥锁类,用于保护共享资......
  • 《安富莱嵌入式周报》第325期:开源可编程精密电阻仪,开源入耳式无线耳机,蓝牙Mesh固件更
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 更新一期视频,趁热打铁,下期CANopen专题视频将在下周发布BSP视频教程第27期:CANopen协议栈专题,实战方式系统了解NMT,PDO,SDO,时间戳,同步报文,紧急报文等(2023-10-17)https://www.armbb......
  • CAS自旋锁到底是什么?为什么能实现线程安全?
    ......
  • java并发线程
    在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolon);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在Thread.start()之前调用,否则运行......
  • 进程和线程的认识
     首先,在我们了解多线程之前,我们需要了解进程的概念以及进程和线程是什么关系?为什么我们Java中更多是需要利用多线程去解决一些问题,而不是多进程来解决?今天就让我们来解释一下。它们之间的关系。 什么是进程?进程是操作系统对于正在运行的应用的一种抽象,也就是说,进程可以看作是程......
  • QT中的线程池的介绍和使用
    (文章目录)前言本篇文章将为大家讲解一下QT中线程池的概念和使用的方法。一、线程池概念讲解线程池是一种常见的并发编程模型,用于管理和复用多个线程来执行任务。它的基本思想是在应用程序启动时创建一组线程,这些线程可以重复使用,以执行一系列的任务,而不需要为每个任务都创建......
  • 10_多线程
    ......
  • 一图看懂开源许可证的种类及含义
    转载自http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种----GPL、BSD、MIT、Mozilla、Apache和LGPL----之中做选择,也很复杂。乌克兰程序员PaulBagwell,画了......