Apache Dubbo Filter 介绍
- Apache Dubbo的Filter与Servlet 的Filter功能类似
- 自定义Filter需要扩展Filter接口
- 自定义Filter可以通过@Activate注解完成默认开启
Apache Dubbo Filter 演示
定义filter
package com.jiangzheng.course.dubbo.provider.filter;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
@Activate(group = "provider")
public class MyFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
URL url = invoker.getUrl();
Class<?> anInterface = invoker.getInterface();
String simpleName = anInterface.getSimpleName();
String serviceName = invocation.getServiceName();
String methodName = invocation.getMethodName();
System.out.println("url : " + url.toFullString());
System.out.println("simpleName : " + simpleName);
System.out.println("serviceName : " + serviceName);
System.out.println("methodName : " + methodName);
return invoker.invoke(invocation);
}
}
定义加载配置
打印结果
url : dubbo://30.96.216.103:29014/com.jiangzheng.course.dubbo.api.service.ServiceDemo?anyhost=true&application=provider&bind.ip=30.96.216.103&bind.port=29014&deprecated=false&dispatcher=all&dubbo=2.0.2&dynamic=true&generic=false&interface=com.jiangzheng.course.dubbo.api.service.ServiceDemo&metadata-type=remote&methods=getName,getSelf&pid=35168&release=3.0.0.preview&side=provider×tamp=1647929726624
simpleName : ServiceDemo
serviceName : null
methodName : getSelf
第二种开启方式
<!--default为dubbo原有的filter,myFilter为我们在META-INF下定义的自定义filter-->
<dubbo:service id="serviceDemo" filter="default,myFilter" interface="com.jiangzheng.course.dubbo.api.service.ServiceDemo" ref="iServiceDemo"/>