Dubbo笔记-10-Dubbo过滤器

概述

过滤器提供了服务提供者和消费者调用过程的拦截,即每次执行RPC调用的时候,对应的过滤器都会生效

过滤器的使用

Dubbo中已经有很多内置的过滤器,并且大多数都是默认启动的,如ContextFilter,对于自行扩展的过滤器,一种方式是使用@Active注解默认启动,另一种方式是在配置文件中配置

1
2
3
4
5
6
7
8
9
10
11
<!-- 消费方调用过程拦截 -->
<dubbo:reference filter="xxx,yyy" />

<!-- 消费方调用过程默认拦截器,将拦截所有reference -->
<dubbo:consumer filter="xxx,yyy" />

<!-- 服务提供方调用过程拦截 -->
<dubbo:service filter="xxx,yyy" />

<!-- 服务提供方调用过程默认拦截器,将拦截所有service -->
<dubbo:provider filter="xxx,yyy" />

以上就是配置方式,下面是一些规则:

  1. 过滤器顺序
    • 用户自定义的过滤器的顺序默认会在框架内置过滤器之后,我们可以使用filter="xxx,default"这种配置方式让自定义的过滤器顺序靠前
    • 我们在配置filter="xxx,yyy"时,写在前面的xxx会比后面的yyy顺序靠前
  2. 剔除过滤器
    对于一些默认的过滤器或自动激活的过滤器,有些方法不想使用这些过滤器,则可以使用"-“加过滤器名称来剔除,如filter=”-xxFilter"会让xxFilter不生效.如果不想使用所有默认启用的过滤器,则可以配置filter="-default"来进行剔除
  3. 过滤器的叠加
    如果服务提供者,消费者端都配置了过滤器,则两边的过滤器不会互相覆盖,而是相互叠加,都会生效,如果需要覆盖,则可在消费方使用"-"的方式剔除对应的过滤器

过滤器的总体结构

QQ图片20190824200528.png

只有CompatibleFilter只继承Filter接口,不会默认被激活.其他的内置过滤器都使用了Activate注解,默认激活;Filter接口上有@SPI注解,用户可以基于这个扩展点接口实现字的过滤器.所有过滤器会被分为消费者和服务提供者两种.消费者类型的过滤器只会在服务引用时被加入Invoker,服务提供者类型的过滤器只会在暴露的时候加入对应的Invoker.

自带过滤器