最近发现dubbo的小bug,顺便整理了一下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中的顺序。
通过查看EchoFilter的Activate属性,可以看到其order = -110000,而ClassLoaderFilter的order=-30000,因此可以断定,order值越小,其越位于调用端的最顶层。那么当order相同时(都没有设置时),又是根据什么排序的呢?
Collections.sort算法
从其说明文档可以看出,这个算法是一个稳定的排序算法,如果两个值相同,不会改变其前后顺序。并且从其文档可以看出,其所使用的是一个修改过的归并排序算法。
但是Activate的compare方法故意将两个相同的order类弄成了不同,导致排序有些变化。造成了最终上述顺序。
所以导致原来配置文件中的位置为:
1、monitor
2、trace
3、exception
4、timeout
排序后变成了
1、exception
2、timeout
3、monitor
4、trace
文章链接:http://donlianli.com/?p=36
相关推荐
dubbo filterdubbo filterdubbo filterdubbo filterdubbo filterdubbo filterdubbo filterdubbo filterdubbo filter
服务过滤器(Filter)是 Dubbo 中的一个强大特性,允许在服务调用前后添加自定义逻辑。开发者可以通过 `Filter` 属性添加过滤器,实现诸如日志记录、限流、鉴权等功能。 十、SPI 扩展机制 Dubbo 基于 Java SPI...
通过学习用户手册,开发者可以理解如何定义服务接口,如何在应用中引入Dubbo,以及如何进行服务的发布和引用。 二、开发手册: 开发手册深入探讨了Dubbo的高级特性,是为有经验的开发者设计的。它详细解析了Dubbo的...
在分布式服务框架 Dubbo 中,异常处理是必不可少的一部分。Dubbo 提供了强大的异常处理机制,使得服务提供者能够向消费者传递自定义异常,从而帮助消费者更好地理解和处理服务调用中的错误情况。本文将深入探讨如何...
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。...本文提供了其中文文档之中的用户手册、开发手册、管理手册。
- **依赖管理**:介绍了如何在项目中引入Dubbo的依赖,通常使用Maven或Gradle进行管理。 #### 五、Dubbo配置详解 - **XML配置**:详细介绍了如何通过XML文件来配置Dubbo服务的各种属性。 - **属性配置**:通过属性...
这份PDF文档详细地涵盖了Dubbo的核心概念、设计原则、配置项、API使用、实战指南等多个方面,是学习和实践中不可或缺的工具。 一、Dubbo核心概念 1. 服务(Service):定义了服务的接口和协议,是提供者和消费者...
dubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo...
例如,在`dubbo-samples-api`模块中定义的接口,会在`dubbo-samples-provider`模块中被具体实现并暴露。 2. **服务消费者(Consumer)** 服务消费者则是调用服务的组件,通过`@Reference`注解引用服务提供者提供的...
在【标签】"dubbo"和"dubbo_admin"中,"dubbo"强调了这个资源与Dubbo框架紧密相关,而"dubbo_admin"进一步指出了其中包含的特定组件——Dubbo的管理工具。 【压缩包子文件的文件名称列表】"dubbo-master"通常表示这...
然后,在 dubbo 的 provider 配置文件中,添加 filter 配置,例如 `<dubbo:provider filter="xxxFilter" />`。 3. ZooKeeper 是如何保证事务的顺序一致性的? ZooKeeper 采用了递增的事务 Id 来标识所有的 ...
10. `<dubbo:filter>` 和 `<dubbo:executor>`:分别用于添加服务过滤器和定制线程池,增强服务行为。 了解这些知识点后,开发者可以根据实际需求,通过XML配置文件灵活地调整和优化Dubbo服务的运行行为。正确理解和...
Dubbo是阿里巴巴开源的分布式服务框架,它具有服务治理、监控、容错和负载均衡等功能,广泛应用于微服务架构中。 在【Home-zh-focusedCommentId=7672484.htm】中,你将找到Dubbo的核心特性介绍,包括服务治理、高...
【描述】提到的"incubator-dubbo-dubbo-2.6.1"表明这是Apache孵化器中的Dubbo项目,Apache孵化器是Apache软件基金会用于孵化开源项目的平台,旨在确保项目符合ASF的治理和开发流程。Dubbo是一个高性能、轻量级的服务...
除了基本配置,`dubbo.xsd`还允许通过`<dubbo:filter>`标签添加自定义的过滤器,这样可以在服务调用前后执行特定的逻辑,实现服务拦截、日志记录、性能监控等功能。此外,通过`<dubbo:monitor>`可以设置监控中心,对...
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) at ...
6. **过滤器(Filter)配置**:`<dubbo:filter>`允许添加自定义的业务逻辑或监控拦截器,增强了服务的可扩展性。 7. **其他扩展配置**:Dubbo.xsd还支持服务级别的配置,如服务质量控制、负载均衡策略、服务路由...
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。此中文文档可以让你更快更容易上手理解及应用到实际项目当中。
4. **微服务架构**:在微服务架构中,Dubbo可以帮助拆分大型系统为多个小型、独立的服务,每个服务都可以独立部署、扩展,降低了系统的复杂性。 5. **集成Spring Boot**:Dubbo可以无缝集成Spring Boot,利用Spring...
【描述】中的“dubbo admin jdk1.8的环境的tomcat解压文件,亲测可以用”意味着这个压缩包包含了已经在JDK1.8和Tomcat服务器环境中成功运行过的Dubbo Admin。Tomcat是一个广泛使用的Java Servlet容器,常用来部署Web...