Dubbo源码分析(十二)-----过滤器之 Filter

509 阅读1分钟

Dubbo版本2.7.3.Release. 之前分析Protocol导出的时候,执行包装类过程ProtocolListenerWrapper-->ProtocolFilterWrapper--->DubboPrococol,这里是构造过滤器链的关键逻辑,通过Filter的扩展点加载,

Dubbo的Filter主要要一下过滤器的实现类如下:

Filter类 功能 使用方 是否激活
AccessLogFilter 主要是保存访问日志 provider
MetricsFilter 上报监控数据 provider,consumer 
TokenFilter 对调用url的token做校验 provider
DeprecatedFilter 过期的方法过滤器 consumer
TraceFilter 方法调用的channel集合记录 provider
CacheFilter 主要是对调用结果的缓存 provider,consumer
TpsLimitFilter 方法级别Tps限流 provider
ValidationFilter 参数校验的过滤器 provider,consumer
ClassLoaderFilter 设置url的interface的ClassLoader provider
MockFilter 直接mock调用 provider,consumer
EchoFilter 用于回声测试 provider

有了这些加载Filter扩展点之后,接下来主要看下Dubbo是怎么组成过滤器链的 加载Filter集合后,首先保存Invoker为last,可以看到for循环是从最后一个Filter开始遍历,然后定义一个next的invoker的变量去指向last, 接着last指向一个新的匿名Invoker 的内部类,然后在invoker方法中,通过从后往前去取出来的filter,调用invoker,对一个last的调用,这样一层套一层,最后生成了最外一层是第一个Filter,所以执行顺序就是从Filter的排序后的Filter顺序执行.

总结
今天主要是对Filter过滤器的种类的分析的总结以及Filter过滤器链的调用分析.