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

本文探讨了Dubbo中Filter的调用顺序,指出Filter的顺序由Activate注解的order属性决定,order值越小,执行越靠前。在order相同的情况下,采用稳定的排序算法。分析了默认的Filter执行顺序,并提及当order相同时,排序可能会发生变化。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值