springcloud接入dynamic-tp动态线程池

springcloud配置中心nacos动态线程池Dynamic-tp配置接入实战 最近业务上需要把项目组几个微服务接入动态线程池框架Dynamic-tp监控,同时支持webhook机器人接受变更通知、容量报警、活性报警、拒绝报警、任务超时报警等通知,方便项目组同事企业微信群实时监控线程池状态,动态调整线程参数。接手开始上手,一看网上教程和demo很多啊,心中窃喜,一顿ctrl+c+v大发,却发现告警不通知,配置线程池不生效,数着承诺的交付时间,开始发慌;几经周折,才定,斯文于记。 阅读详情

ThreadPoolExecutor的corePoolSize和maximumPoolSize的set方法都是public的,可以进行设置值,队列大小的参数是final,修改不了,但是可以通过改造也可以动态修改队列大小在这里插入图片描述
在这里插入图片描述

spring的ThreadPoolTaskExecutor是对Jdk的ThreadPoolExecutor的进一步封装,使用的是装饰器模式

在这里插入图片描述
使用dynamic-tp动态线程池 官网地址
使用springcloud演示,把线程池参数配置放进nacos进行配置

1.引入依赖

		<dependency>
            <groupId>cn.dynamictp</groupId>
            <artifactId>dynamic-tp-spring-boot-starter-extension-notify-email</artifactId>
        </dependency>

2.启动类上注解@EnableDynamicTp

3.nacos配置文件中添加配置

spring:
  # email notify configuration
  mail:
    # (optional) email subject, default:ThreadPool Notify
    title: ThreadPool Notify
    # mail service address
    host: smtp.163.com
    port: 465
    # send from
    username: st1913996xx56@163.com
    # authorization code eg: rlpadadtcugh4152e
    password: QXXIGHJDYOSGxxxx
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
          ssl:
            enable: true
        debug: false
  dynamic:
    tp:
      enabled: true
      enabledBanner: true           # 是否开启banner打印,默认true
      enabledCollect: true          # 是否开启监控指标采集,默认false
      collectorTypes: micrometer,logging     # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
      logPath: /home/logs           # 监控日志数据路径,默认 ${user.home}/logs,采集类型非logging不用配置
      monitorInterval: 5            # 监控时间间隔(报警判断、指标采集),默认5s
      platforms:                    # 通知报警平台配置
        - platform: email
          receivers: 15136161050@163.com
      tomcatTp:                                    # tomcat webserver线程池配置
        corePoolSize: 100
        maximumPoolSize: 200
        keepAliveTime: 60
      executors:                                   # 动态线程池配置
        - threadPoolName: dtpExecutor
          threadPoolAliasName: 测试线程池           # 线程池别名
          executorType: common                     # 线程池类型common、eager:适用于io密集型
          corePoolSize: 5
          maximumPoolSize: 18
          queueCapacity: 400
          queueType: VariableLinkedBlockingQueue   # 任务队列,查看源码QueueTypeEnum枚举类
          rejectedHandlerType: CallerRunsPolicy    # 拒绝策略,查看RejectedTypeEnum枚举类
          keepAliveTime: 50
          allowCoreThreadTimeOut: false                  # 是否允许核心线程池超时
          threadNamePrefix: test                         # 线程名前缀
          waitForTasksToCompleteOnShutdown: false      # 参考spring线程池设计,优雅关闭线程池
          awaitTerminationSeconds: 5                     # 单位(s)
          preStartAllCoreThreads: false                  # 是否预热所有核心线程,默认false
          runTimeout: 200               # 任务执行超时阈值,目前只做告警用,单位(ms)
          queueTimeout: 100              # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
          taskWrapperNames: ["ttl"]        # 任务包装器名称,集成TaskWrapper接口
          notifyItems:                     # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
            - type: capacity               # 报警项类型,查看源码 NotifyTypeEnum枚举类
              enabled: true
              threshold: 80                # 报警阈值
              platforms: [ding,wechat]    # 可选配置,不配置默认拿上层platforms配置的所以平台
              interval: 120                # 报警间隔(单位:s)
            - type: change
              enabled: true
            - type: liveness
              enabled: true
              threshold: 80
            - type: reject
              enabled: true
              threshold: 1
            - type: run_timeout
              enabled: true
              threshold: 1
            - type: queue_timeout
              enabled: true
              threshold: 1

4.测试

 @GetMapping("testDynamicPool")
    public void testDynamicPool() {
        dtpExecutor.execute(()-> System.out.println("测试动态线程池"));
        log.info("核心线程数:{},最大线程数:{},队列大小:{}",dtpExecutor.getCorePoolSize(),dtpExecutor.getMaximumPoolSize(),dtpExecutor.getQueueCapacity());
    }

在nacos中修改之后访问接口会看到修改的结果

【Nacos】Spring Cloud项目部署nacos步骤 Nacos安装搭建进Spring Cloud项目步骤一、下载二、启动服务器三、Spring Cloud搭建遇到的问题 说明:本文写作目的单纯是记录一次项目搭建,以便于以后查看。 开发工具:IDEA;操作系统:MacOS 介绍:Nacos是阿里巴巴的产品,现在是Spring Cloud的一个组件。相比于Euraka功能更加丰富。 一、下载 打开Nacos的官方地址:https://github.com/alibaba/nacos/releases 选择最新版本的压缩包下载 在文件夹中解压后,可以看到内部的结 阅读详情

相关推荐

dynamic-pool:无锁,线程安全,动态大小的对象池

dynamic-pool 无锁,线程安全,动态大小的对象池。 该池以初始容量开始,如果没有可用空间,它将根据请求继续创建新对象。 合并后的对象将在销毁后返回到池中(有一项额外规定,可以选择“重置”对象的状态以供重新使用)。 如果在尝试返回的过程中某个池中已经有maximum_capacity对象,则该池将丢弃该对象。 基本用法 将此添加到您的Cargo.toml : [ dependencies ] dynamic-pool = " 0.1 " 接下来,进行一些池化: use dynamic_pool :: {DynamicPool, DynamicReset}; #[derive(Default)] struct Person { name: String , age: u16 , } impl DynamicReset for Person { fn

动态线程池Dinamic-Tp(基础篇)

本文主要讲Dinamic-Tp开源框架的基础知识。DynamicTp项目地址:官网:https://dynamictp.cn/gitee地址:https://gitee.com/dromara/dynamic-tpgithub地址:https://github.com/dromara/dynamic-tp使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢?那么使

我家有个小喵咪 8948

利用gprMax与Matlab实现SFCW雷达信号的高效仿真与优化

本文详细介绍了如何结合gprMax与Matlab实现SFCW雷达信号的高效仿真与优化。通过利用gprMax获取地下场景的冲激响应,并在Matlab中运用卷积与信号处理技术,可大幅提升SFCW雷达系统仿真的效率与灵活性,为探地雷达研究与设计提供强大工具。

book8的博客 705

线程池,我是谁?我在哪儿?

DynamicTp是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。经过几个版本迭代,目前最新版本v1.0.7具有以下特性特性✅代码零侵入所有配置都放在配置中心,对业务代码零侵入轻量简单基于springboot实现,引入starter,接入只需简单4步就可完成,顺利3分钟搞定高可扩展框架核心功能都提供SPI接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)线上大规模应用。...

https://github.com/lyh200 572

告别ROS1!在Ubuntu 22.04上为VINS-Fusion适配ROS2 Humble的完整踩坑记录

本文详细记录了在Ubuntu 22.04上将VINS-Fusion从ROS1迁移到ROS2 Humble的完整过程,包括环境搭建、依赖管理、核心代码适配及性能优化。通过实战案例和调试技巧,帮助开发者高效解决迁移过程中的常见问题,提升系统稳定性和性能。

weixin_42628688的博客 280

手把手教你用STM32单片机控制双向可控硅调光(附完整代码+电路图)

本文提供了一套完整的STM32单片机控制双向可控硅实现灯光无级调光的实战方案。详细讲解了硬件电路设计,包括过零检测与隔离驱动,并剖析了基于定时器中断的软件核心逻辑,通过精准的相位角计算实现平滑的灯光强度控制。附有完整代码与电路图,适合嵌入式开发者实践。

weixin_29194255的博客 951

JAVA面试题分享二百五十七:Spring Cloud 如何构建动态线程池?

除了监控功能,我们还可以利用Prometheus或Grafana的报警功能,为我们的指标设置告警规则和通知渠道,当指标达到某些条件时,例如线程平均耗时过长,大量线程执行异常,大量任务被拒绝时,及时收到告警通知,例如钉钉、邮件等。的报警功能,为你的指标数据设置告警规则和通知渠道,当指标达到某些条件时,及时收到告警通知,例如钉钉、邮件等。实际上, 大部分的线程都是 混合型线程, 很难准确的去估算 线程等待时间 和 线程CPU时间. 所以,一种有效的办法是:根据 监控指标,动态的标准 线程池的线程数。

之乎者也·的博客 1348

基于NXP BFU730F的宽带WiFi LNA设计:从原理到实测的完整指南

低噪声放大器(LNA)是无线通信接收链路中的关键器件,其性能直接决定了系统的接收灵敏度。LNA的核心原理是在放大微弱信号的同时,尽可能降低自身引入的噪声,并保持良好的线性度以应对强干扰。在宽带应用场景下,如覆盖2.4GHz至5.9GHz的现代WiFi系统,设计需在宽带匹配、噪声优化和增益平坦度之间取得精妙平衡。本文以NXP的BFU730F SiGe:C HBT晶体管为核心,深入解析一种采用电阻反馈和LC匹配网络的经典宽带LNA架构。该设计通过优化反馈网络,在宽达3.5GHz的频带内实现了优异的噪声系数(低至

weixin_33587161的博客 326

动态线程池dynamic-tp接入Consul配置中心

前言     自从笔者给dynamic-tp接入了Zookeeper配置中心,就想着再扩展其他的配置中心,恰好笔者近期也在调研Consul配置中心,所以就想着将Consul配置中心接入到dynamic-tp。 dynamic-tp快速接入: dynamic-tp官网: 接入Consul配置中心具体实现     Consul配置中心是通过定时任务做的配置变更,为了屏蔽底层实现,这里我选择对SpringBoot程序和SpringCloud应用进行接入,使用的包是sprin

qq_31279701的博客 2392

Pylon SDK C语言多相机采集的注意事项、关键设置及代码示例

前言 与单相机直接用句柄PYLON_DEVICE_HANDLE hdev进行操作所不同的是,在多相机连接采用索引值访问每个相机,对应句柄为PYLON_DEVICE_HANDLE hdev[deviceIndex] 。若连接N个相机设备,则索引值范围为[0,...,N-1]。显而易见,采用循环结构编程可以对多个相机采用同样的操作,包括参数设置、图像采集等。但多个相机的使用需要根据相机功能、相机与主机间的连接方式、网络适配器进行额外的设置。本文参考Pylon C开发者手册和Basler产品文档,对GigE类型

黑化咸鱼的博客 3089

微带天线理论学习笔记(1)

微带天线的概念是由Deschamps于1953年提出来的,它是在一块厚度远小于工作波长的介质基片的一面敷以金属辐射片、一面全部敷以金属薄层作接地板而成。辐射片可以根据不同的要求设计成各种形状。微带天线具有质量轻、体积小和易于制造等优点,广泛应用于个人无线通信中。

qq_36521926的博客 6223

【开源项目】Dynamic-Tp核心流程源码解读

【开源项目】Dynamic-Tp核心流程源码解读

秋装什么的博客 2323

1 初识智能化测试

非常感谢您可以和我一起来聊一聊智能化测试的一些事。智能化测试是一个新鲜又老旧的问题,说新鲜是因为很多人当听到智能化测试都会联想到人工智能、机器学习、深度学习等高大上的技术,很多时候觉得离我们的实际工作还很远;说老旧,是因为智能化测试的一些技术的发展在行业里面已经很久了,例如符号执行、静态分析等技术已经有很长的历史了。近些年,随着测试技术的的飞速发展,智能化测试也有了越来越多的实践,优秀的开源项目慢慢的被行业推行并且落地。那么在这里我们就一起来聊聊智能化测试以及智能化测试好的思路、实践、方法以及技术落地过程。

Criss@陈磊 2623

Dynamic-TP入门初探

Dynamic-tp是美团开源的一个基于配置中心的轻量级动态可监控线程池中间件,通过它可以很轻松的配置和监控线程的相关信息。接入相对比较简单,使用起来也比较方便,需要调优的时候,直接修改nacos配置文件,然后重新发布即可。

沛哥儿的专栏 1348

马达种类全解析:VCM、Stepper、Piezo 在手机相机中的驱动原理与工程差异

在现代手机影像系统中,马达承担着核心成像组件的动态调节任务,如自动对焦(AF)、光学防抖(OIS)以及变焦调节。目前主流采用三类驱动器件:VCM(Voice Coil Motor)、Stepper(步进马达)、Piezo(压电马达)。不同马达方案在结构复杂度、响应速度、功耗、驱动方式与模组厚度适配等方面差异显著,对成像系统的性能表现有直接影响。本文将结合最新旗舰设备的应用现状,系统剖析这三类驱动马达的工作原理、架构特点与工程应用经验,为工程实践中选型与调试提供参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3772

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

开源动态线程池组件 Dynamic-TP 学习记录(二) -- 线程池参数更新过程

是项目example的启动方式在上一篇博客中已经有详细描述了,这一篇主要来探讨代码的基本执行流程。

weixin_59205737的博客 2943

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Springboot整合dynamicTp实现动态线程池监控技术

动态线程池监控

青春不散场的专栏 1294

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

动态线程池Dinamic-Tp(接入篇)

DynamicTp项目地址:首页 | dynamic-tp本文主要讲一下怎么接入dynamic-tp。

我家有个小喵咪 9717

开源动态线程池组件 Dynamic-TP 学习记录(一) -- 接入nacos示例

是。

weixin_59205737的博客 2374

动态线程池dynamic-tp快速接入

dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改,目前支持的配置中心有Apollo,Nacos和Zookeeper

qq_31279701的博客 6680

动态轻量级线程池项目

① 利用Spring的事件机制和核心逻辑解耦,服务启动获取第三方中间件的线程池,被 框架管理起来,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、 Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc、RabbitMq 等组件线程池管理。① 监听特定配置中心的指定配置文件(已实现 Nacos、Apollo、Zookeeper、Consul、 Etcd、Polaris、ServiceComb),可通过内部提供的SPI接口扩展其他实现。

QiAn的博客 1459

科普文:微服务之SpringBoot性能优化器动态线程池【Dynamic-Tp】特性和源码解读

dynamic-tp设计巧妙,代码中设计模式先行,结构清晰易懂,代码规整,同时提供了很多扩展点,通过利用了Spring的扩展,和JUC原生线程池优势,功能强大。

为无为,事无事,味无味。 2374

【开源分享】轻量级动态可监控线程池解决方案:dynamic-tp

使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢?代码中创建了一个 ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适凭经验设置参数值,上线后发现需要调整,改代码重新发布服务,非常麻烦线程池相对开发人员来说是个黑盒,运行情况不能及时感知到,直到出现问题如果有以上痛点,动态可监控线程池框架(DynamicTp)或许能帮助到你。🔥🔥🔥 一款基于配置中心的轻量级动态可监控线程池。

技术分享 3265

开源动态线程池dynamic-tp支持zookeeper配置中心

前言     dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改,在配置中心的支持上最开始的时候支持Nacos和Apollo,由于笔者公司用的配置中心是Zookeeper,所以就想着扩展支持Zookeeper,在了解源码支持发现dynamic-tp的扩展能力做的很好,提供了扩展接口,只要我开发对应的配置中心模块即可,最终笔者实现了Zookeeper的支持并贡献到社区。接下来我通过源码解析方式介绍下Zookee

qq_31279701的博客 2801

美团动态ThreadPoolExecutor底层实现源码实战

介绍springboot连接nacos实现动态线程池,同时得安装nacos,同时代码将有两个模块,dtp-spring-boot-starter 与 user 模块,前者将是独立的动态线程池,可以引入自己的项目中,后者模块主要用于测试与使用动态线程池模块。注意springboot与nacos的适配版本!

qq_67801847的博客 701

动态线程池,真香!

基于以上背景分析,我们对线程池 ThreadPoolExecutor 做一些扩展增强,主要实现以下目标」❝1.实现对运行中线程池参数的动态修改,实时生效2.实时监控线程池的运行状态,触发设置的报警策略时报警,报警信息推送办公平台3.定时采集线程池指标数据,配合像 grafana 这种可视化监控平台做大盘监控❞「经过多个版本的迭代,目前最新版本 v1.0.9 具有以下特性」✅「代码零侵入」:所有配置都放在配置中心,对业务代码零侵入「轻量简单」:基于 SpringBoot 实现,引入starter。

m0_69632475的博客 780
上一篇: Spring Cloud Sleuth 全链路日志跟踪
下一篇: 高并发解决方案
livel_java
博客等级 码龄9年 2916粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值