Dubbo Filter 顺序

Dubbo的Filter执行顺序分析

回眸只為那壹抹淺笑 提交于 2019-12-02 08:27:45
最近用到了Dubbo的Filter来做一些监控的东西,顺便整理了一下dubbo中的Filter调用顺序及如何确定的。 服务提供方的过滤器被调用顺序: EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->(这4个是在代码中指定的) ExceptionFilter-> TimeoutFilter ->MonitorFilter-> TraceFilter 服务消费方的过滤器顺序: ConsumerContextFilter->FutureFilter->MonitorFilter 负责加载过滤器的类 ProtocolFilterWrapper 这个顺序和SPI配置文件的顺序并不一致。那么是什么决定了Filter的顺序呢? 通过查看源代码可以看到,在初始化Filter时,有一个对所有的过滤器排序的过程,其使用的比较类是ActivateComparator。在这个类中,可以看到,是使用Filter中的Activate类进行排序的。而Activate注解中,有一个order的属性,这个属性指定了Filter在chain中的顺序。代码如下: @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD