# lgxly_dubbo_2 **Repository Path**: tanbubu/lgxly_dubbo_2 ## Basic Information - **Project Name**: lgxly_dubbo_2 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-06 - **Last Updated**: 2021-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lgxly_dubbo_2 #### 介绍 作业 编程题二:简易版Dubbo方法级性能监控 在真实业务场景中,经常需要对各个业务接口的响应性能进行监控(常用指标为:TP90、TP99) 下面通过扩展Dubbo的Filter(TPMonitorFilter),完成简易版本 Dubbo 接口方法级性能监控,记录下TP90、TP99请求的耗时情况 题目要求: 1. 编写一个Dubbo服务,提供3个方法(methodA、methodB、methodC),每方法都实现了随机休眠0-100ms 2. 编写一个消费端程序,不断调用Dubbo服务的3个方法(建议利用线程池进行并行调用,确保在1分钟内可以被调用2000次以上) 3. 利用TPMonitorFilter在消费端记录每个方法的请求耗时时间(异步调用不进行记录) 4. 每隔5s打印一次最近1分钟内每个方法的TP90、TP99的耗时情况 ------------------------------------------------------------ 作业资料说明: 1、提供资料:2个代码工程、验证及讲解视频。(仓库中只有本次作业内容) 2、讲解内容包含:题目分析、实现思路、代码讲解。 3、效果视频验证: 3.1 作业1实现A和B打印请求的IP地址。 3.2 作业2 每隔5秒打印三个方法的TP90和TP99 该项目分三个子模块 api、provide、consumer api模块中 DemoService接口提供三个方法定义 hello、hello2、hello3 provide模块中 DemoServiceImpl 实现三个方法 类上添加 dubbo @service注解。 每个方法中休眠不同时间模拟方法执行耗时。 consumer模块中 提供了三个 HelloServiceConsumer1、HelloServiceConsumer2、HelloServiceConsumer3 调用类。使用多线程方式死循环调用provide中的三个方法。 在启动类ConsumerApplication的main函数中分别启动三个线程开始执行调用 provide模块中 提供了 MonitorFilter过滤器 实现filter接口,并在resources\META-INF\dubbo\com.alibaba.dubbo.rpc.Filter中定义了该filter MonitorFilter中提供两个方法 invoke 实现filter接口 在provider端拦截请求并计算方法耗时,将耗时数据分类存到 executeTimeCircle对象中。数据结构采用ConcurrentHashMap实现的时间轮结构。按秒数存储1分钟内的接口耗时列表 timerPrint 多线程实现了每隔5秒从executeTimeCircle对象中读取统计数据,计算三个方法的tp90、tp99数据,分别打印结果 [{"methodName":"hello2","tp90":72,"tp99":78},{"methodName":"hello","tp90":45,"tp99":49},{"methodName":"hello3","tp90":90,"tp99":98}]