filter执行先后问题_Dubbo的Filter执行顺序分析

最近用到了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})

public @interface Activate {

String[] group() default {};

String[] value() default {};

你可能感兴趣的:(filter执行先后问题)