没有合适的资源?快使用搜索试试~ 我知道了~
[] - 2022-07-04 简历写着熟悉 Dubbo,居然连 Dubbo 线程池监控都不知道?.pdf
需积分: 0 0 下载量 47 浏览量
2023-12-11
21:48:44
上传
评论
收藏 977KB PDF 举报
温馨提示
试读
16页
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能
资源推荐
资源详情
资源评论
简历写着熟悉 Dubbo,居然连 Dubbo
线程池监控都不知道?
2022-07-04原文
点击关注公众号,Java干货及时送达👇
Dubbo
是一款优秀的微服务框架,它以其高性能、简单易用、易扩展等特点,广
泛应用于互联网、金融保险、科技公司、制造业、零售物流等多个领域。
如今,Dubbo 框架已经成了互联网开发中比较常用的技术框架。
在Dubbo框架中,当客户端调用服务端的时候,请求抵达了服务端之后,
会有专门的线程池去接收参数并且处理。所以如果要实现Dubbo的线程池
监控,就需要先了解下Dubbo底层对于业务线程池的实现原理。
Dubbo底层对于线程池的查看
这 里 我 所 使 用 的 框 架 是 Dubbo 2.7.8
版本,它在底层对于线程池的管理是通过一个叫做ExecutorRepository
的 类 处 理 的 , 这 个 类 负 责 创 建 并 管 理 Dubbo
中的线程池,通过该扩展接口,我们可以获取到Dubbo再实际运行中的业
务线程池对象。
具体的处理逻辑部分如下所示:
package org.idea.dubbo.monitor.core.collect;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository;
import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
import java.lang.reflect.Field;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @Author idea
* @Date created in 7:04
下 午
2022/6/29
*/
public class DubboThreadPoolCollector {
/**
*
获 取
Dubbo
的 线 程 池
* @return
*/
public static ThreadPoolExecutor getDubboThreadPoolInfo(){
//dubbo
线 程 池 数 量 监 控
try {
ExtensionLoader<ExecutorRepository> executorRepositoryExtensionL
oader = ExtensionLoader.getExtensionLoader(ExecutorRepository.class);
DefaultExecutorRepository defaultExecutorRepository = (DefaultEx
ecutorRepository) executorRepositoryExtensionLoader.getDefaultExtension();
Field dataField = defaultExecutorRepository.getClass().getDeclar
edField("data");
dataField.setAccessible(true);
ConcurrentMap<String, ConcurrentMap<Integer, ExecutorService>> d
ata = (ConcurrentMap<String, ConcurrentMap<Integer, ExecutorService>>) dataF
ield.get(defaultExecutorRepository);
ConcurrentMap<Integer, ExecutorService> executorServiceConcurren
tMap = data.get("java.util.concurrent.ExecutorService");
//
获 取 到 默 认 的 线 程 池 模 型
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) exe
cutorServiceConcurrentMap.get(9090);
return threadPoolExecutor;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
好了,现在我们知道如何在代码中实时查看Dubbo线程池的信息了,那么
接下来要做的就是如何采集这些线程池的数据,并且进行上报,最后将上
报存储的数据通过统计图的方式展示出来。
下边我们按照采集,上报,展示三个环节来展示数据。
采集数据
在采集数据这块,有两种思路去采集,分别如下:
后台开启一个定时任务,然后每秒都查询一下线程池的参数信息。
每次有请求抵达provider的时候,就查看一些线程池的参数信息
。
采用两种不同的模式采集出来的数据,可能会有些差异,下边是两种方式
的比对:
统计方式
实现难度
可能存在的问题
剩余15页未读,继续阅读
资源评论
白话机器学习
- 粉丝: 1w+
- 资源: 7706
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功