调用拦截扩展
(1) 扩展说明
服务提供方和服务消费方调用过程拦截,Dubbo本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。
约定:
- 用户自定义filter默认在内置filter之后。
- 特殊值default,表示缺省扩展点插入的位置。
- 比如:filter="xxx,default,yyy",表示xxx在缺省filter之前,yyy在缺省filter之后。
- 特殊符号-,表示剔除。
- 比如:filter="-foo1",剔除添加缺省扩展点foo1。
- 比如:filter="-default",剔除添加所有缺省扩展点。
- provider和service同时配置的filter时,累加所有filter,而不是覆盖。
- 比如:<dubbo:provider filter="xxx,yyy"/>和<dubbo:service filter="aaa,bbb" />,则xxx,yyy,aaa,bbb均会生效。
- 如果要覆盖,需配置:<dubbo:service filter="-xxx,-yyy,aaa,bbb" />
(2) 扩展接口:
com.alibaba.dubbo.rpc.Filter |
(3) 扩展配置:
< dubbo:reference filter = "xxx,yyy" /> <!-- 消费方调用过程拦截 --> < dubbo:consumer filter = "xxx,yyy" /> <!-- 消费方调用过程缺省拦截器,将拦截所有reference --> < dubbo:service filter = "xxx,yyy" /> <!-- 提供方调用过程拦截 --> < dubbo:provider filter = "xxx,yyy" /> <!-- 提供方调用过程缺省拦截器,将拦截所有service --> |
(4) 已知扩展:
com.alibaba.dubbo.rpc.filter.EchoFilter com.alibaba.dubbo.rpc.filter.GenericFilter com.alibaba.dubbo.rpc.filter.GenericImplFilter com.alibaba.dubbo.rpc.filter.TokenFilter com.alibaba.dubbo.rpc.filter.AccessLogFilter com.alibaba.dubbo.rpc.filter.CountFilter com.alibaba.dubbo.rpc.filter.ActiveLimitFilter com.alibaba.dubbo.rpc.filter.ClassLoaderFilter com.alibaba.dubbo.rpc.filter.ContextFilter com.alibaba.dubbo.rpc.filter.ConsumerContextFilter com.alibaba.dubbo.rpc.filter.ExceptionFilter com.alibaba.dubbo.rpc.filter.ExecuteLimitFilter com.alibaba.dubbo.rpc.filter.DeprecatedFilter |
(5) 扩展示例:
Maven项目结构
src |-main |-java |-com |-xxx |-XxxFilter.java (实现Filter接口) |-resources |-META-INF |-dubbo |-com.alibaba.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter) |
XxxFilter.java
package com.xxx; import com.alibaba.dubbo.rpc.Filter; import com.alibaba.dubbo.rpc.Invoker; import com.alibaba.dubbo.rpc.Invocation; import com.alibaba.dubbo.rpc.Result; import com.alibaba.dubbo.rpc.RpcException; public class XxxFilter implements Filter { public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { // before filter ... Result result = invoker.invoke(invocation); // after filter ... return result; } } |
META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
xxx=com.xxx.XxxFilter |
Labels:
None
Add Comment