服务提供方和服务消费方调用过程拦截,Dubbo 自己的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。java
约定:git
default
,表示缺省扩展点插入的位置。好比:filter="xxx,default,yyy"
,表示 xxx
在缺省 filter 以前,yyy
在缺省 filter 以后。-
,表示剔除。好比:filter="-foo1"
,剔除添加缺省扩展点 foo1
。好比:filter="-default"
,剔除添加全部缺省扩展点。<dubbo:provider filter="xxx,yyy"/>
和 <dubbo:service filter="aaa,bbb" />
,则 xxx
,yyy
,aaa
,bbb
均会生效。若是要覆盖,需配置:<dubbo:service filter="-xxx,-yyy,aaa,bbb" />
简单示例: githubgithub
1, 代码api
import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.extension.Activate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.dubbo.rpc.*; import java.util.List; @Activate(group = Constants.PROVIDER, order = -999) public class AuthorityFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(AuthorityFilter.class); @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { logger.info("接口名:{}",invocation.getInvoker().getInterface().getName()); logger.info("方法名:{}",invocation.getMethodName()); String clientIp = RpcContext.getContext().getRemoteHost(); logger.info("访问ip为{}", clientIp); return invoker.invoke(invocation); } }
2, 配置 MATA-INF\dubbo\com.alibaba.dubbo.rpc.Filter 文件下面内容ide
AuthorityFilter=zzhiDubboprovider.filter.AuthorityFilter
3,测试:性能
2017-12-21 10:47:01.906 INFO 10820 --- [:20880-thread-2] z.filter.AuthorityFilter : 接口名:zzhiDubboapi.service.PeopleService 2017-12-21 10:47:01.908 INFO 10820 --- [:20880-thread-2] z.filter.AuthorityFilter : 方法名:findPeople 2017-12-21 10:47:01.908 INFO 10820 --- [:20880-thread-2] z.filter.AuthorityFilter : 访问ip为10.255.2.122