给Dubbo添砖加瓦:自定义Filter扩展点实现!

本文介绍了如何在Dubbo中实现自定义Filter,以收集接口响应性能数据。通过扩展org.apache.dubbo.rpc.Filter接口,创建了Pepper-Metrics-Dubbo模块,包含DubboProfilerFilterTemplate、DubboProviderProfilerFilter和DubboConsumerProfilerFilter。详细阐述了Filter的配置、使用及自动激活机制,使得性能监控能够在引入依赖后无需额外配置即可生效。
摘要由CSDN通过智能技术生成

最近一个小伙伴在开发一款小而美的应用程序性能监控框架(Pepper-Metrics)。

其中一个需求,需要收集Dubbo在Provider端和Consumer端的接口响应性能数据,以便存储到DataSource中或提供给Printer使用。

在此背景下,我们需要对Provider端和Consumer端的每一次请求和响应进行监控。在Dubbo中,可以通过扩展org.apache.dubbo.rpc.Filter接口实现。

01  org.apache.dubbo.rpc.Filter介绍

Filter可以理解为调用过程拦截,每次方法调用该拦截器都会生效,扩展时需要注意对性能的影响。

用户定义的Filter默认在已有的Filter之后被执行。

02  Pepper-Metrics-Dubbo的Filter实现

在我们的项目中,这个子模块被命名为Pepper-Metrics-Dubbo,此模块的结构如下:

Pepper-Metrics-Dubbo
    |-src/main/java
        |-com.pepper.metrics.integration.dubbo
            |-DubboProfilerFilterTemplate
            |-DubboProviderProfilerFilter
            |-DubboConsumerProfilerFilter
    |-src/main/resources
        |-META-INF
            |-dubbo
                |-org.apache.dubbo.rpc.Filter

在Pepper-Metrics-Dubbo中,DubboProfilerFilterTemplate类实现了org.apache.dubbo.rpc.Filter接口。

这是一个模板类,定义了Filter.invoke()方法的通用实现,由于具体收集profile时,针对Provider和Consumer需要不同的收集器,这里通过其子类DubboProviderProfilerFilter和DubboConsumerProfilerFilter分别实现。

上述的类关系可通过下图描述:

 

DubboProfilerFilterTemplate大致实现如下:

public abstract class DubboProfilerFilterTemplate implements Filter {

    // Provider的收集器
    static final Stats PROFILER_STAT_IN = Profiler.Builder
            .builder()
            .name("app.dubbo.request.in")
            .build();
    // Consumer的收集器
    static final Stats PROFILER_
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值