Dubbo过滤器原理
关注可以查看更多粉丝专享blog~
概述
Dubbo过滤器提供了服务提供者和消费者的调用拦截,即每次执行RPC调用的时候,对应的过滤器都会生效。虽然过滤器功能强大,但由于每次调用的时候都会执行,因此在使用的时候需要注意它对性能的影响。
使用方式
在Dubbo中又很多内置过滤器,并且大多数都是使用@Activate注解默认启用的,比如ContextFilter。对于自行扩展的过滤器有以下两种启用方式。
@Activate注解启用
在自定义的过滤器类上添加@Activate(group = Constants.PROVIDER/CONSUMER, order = -10000)注解即可,group标识是提供者/消费者过滤器,order标识优先级(越小越先执行)。
XML配置启用
<!-- 消费方调用过程拦截 -->
<dubbo:reference filter="xxx,yyy"/>
<!-- 消费方调用过程默认拦截器,将拦截所有reference -->
<dubbo:consumer filter="xxx,yyy"/>
<!-- 服务提供方调用过程拦截 -->
<dubbo:service filter="xxx,yyy"/>
<!-- 服务提供方调用过程默认拦截器,将拦截所有reference -->
<dubbo:provider filter="xxx,yyy"/>
规则
- 过滤器顺序:
- 用户自定义的过滤器顺序默认会在框架内置过滤器之后,我们可以使用filter="xxx,default"这种配置方式让自定义过滤器顺序靠前。
- 我们在配置filter="xxx,yyy"的时候,写在前面的xxx会比yyy的顺序要靠前。
- 剔除过滤器:对于一些默认过滤器或一些自动激活的过滤器,有些方法不想使用这些过滤器,则可以使用"-“加过滤器名称来过滤,如filter=”-ContextFilter"会让ContextFilter不生效,如果不想使用所有默认启动的过滤器,则可以配置filter="-default"来进行剔除。
- 过滤器的叠加:如果服务提供者消费者都配置了过滤器,则两边过滤器不会互相覆盖,而是互相叠加,都会生效。如果需要覆盖,则可以在消费方使用"-"的方式剔除对应的过滤器。
总体结构图
作用列表
过滤器名称 | 作用 | 使用方 |
---|---|---|
AccessLogFilter | 打印每一次请求的访问日志。如果需要访问的日志只出现在指定的appender中,则可以在log的配置文件中配置additivity | provider |
ActiveLimi |