Dubbo Filter 拦截器基础使用姿势,附带源码演示Demo

1,003 阅读1分钟

写在前面

 当前WEB架构中,很多同学都知道springMvc框架的拦截器,可以用来做用户登录鉴权,日志记录等;
同样在我们微服务架构中,如RPC Dubbo框架,也有类似拦截器,这里直接上干货,演示一下使用姿势。

企业微信截图_4fdf4737-590b-4013-81f6-63e0ce60dbac.png

实战姿势

1 编写自定义拦截器类DubboFilter 并继承com.alibaba.dubbo.rpc.Filter
@Slf4j
//1 使用注解开启 拦截器
@Activate(group = {Constants.PROVIDER})
public class DubboFilter implements Filter {

    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        //打印入参
        log.info("dubbo入参,InterfaceName={},MethodName={},Parameter={}", invocation.getInvoker().getInterface().getName(), invocation.getMethodName(), invocation.getArguments());
        //执行接口调用逻辑
        Result result = invoker.invoke(invocation);
        //打印结果
        System.out.println(result);
        //返回结果响应数据
        return result;
    }
}
2 创建META-INF/dubbo/com.alibaba.dubbo.rpc 文件并将DubboFilter配置写入;
  dubboFilter=com.yh.test.nacos.filter.DubboFilter 如图

企业微信截图_7dfae6be-22ad-4888-a4e6-25b3abfaa927.png

3 开启拦截器,开启的方式有两种
  3.1 在我们的DubboFilter类上添加注解@Activate(group = {Constants.PROVIDER})
  3.2 或者在相关spring-dubbo.xml配置中 增加配置<dubbo:provider filter="dubboFilter"/>
  

企业微信截图_5beb9022-9b0a-4ebd-a8ca-f18b9af3a12f.png

企业微信截图_fa18e38a-2b61-4553-9c22-263d923a9c8a.png

实战演示效果

假设provider提供了一个add方法,用来计算两数之和, 然后我们通过拦截器来打印,consumer调用时传入的参数

企业微信截图_f0ea2550-a3b9-4b77-934f-542dbdd5b6af.png

源码下载

Dubbo Filter 拦截器基础使用姿势源码下载