概述
过滤器提供了服务提供者和消费者调用过程的拦截,即每次执行RPC调用的时候,对应的过滤器都会生效
过滤器的使用
Dubbo中已经有很多内置的过滤器,并且大多数都是默认启动的,如ContextFilter,对于自行扩展的过滤器,一种方式是使用@Active注解默认启动,另一种方式是在配置文件中配置
1 | <!-- 消费方调用过程拦截 --> |
以上就是配置方式,下面是一些规则:
- 过滤器顺序
- 用户自定义的过滤器的顺序默认会在框架内置过滤器之后,我们可以使用filter="xxx,default"这种配置方式让自定义的过滤器顺序靠前
- 我们在配置filter="xxx,yyy"时,写在前面的xxx会比后面的yyy顺序靠前
- 剔除过滤器
对于一些默认的过滤器或自动激活的过滤器,有些方法不想使用这些过滤器,则可以使用"-“加过滤器名称来剔除,如filter=”-xxFilter"会让xxFilter不生效.如果不想使用所有默认启用的过滤器,则可以配置filter="-default"来进行剔除 - 过滤器的叠加
如果服务提供者,消费者端都配置了过滤器,则两边的过滤器不会互相覆盖,而是相互叠加,都会生效,如果需要覆盖,则可在消费方使用"-"的方式剔除对应的过滤器
过滤器的总体结构
只有CompatibleFilter只继承Filter接口,不会默认被激活.其他的内置过滤器都使用了Activate注解,默认激活;Filter接口上有@SPI注解,用户可以基于这个扩展点接口实现字的过滤器.所有过滤器会被分为消费者和服务提供者两种.消费者类型的过滤器只会在服务引用时被加入Invoker,服务提供者类型的过滤器只会在暴露的时候加入对应的Invoker.