Dubbo拦截器的坑

Dubbo使用介绍

dubbo过滤器类似于jsp servlet中的filter,spring中的filter拦截器思想一样。可以通过该机制在执行目标程序前后执行我们指定的代码。

Dubbo的Filter机制,是专门为服务提供方和服务消费方调用过程进行拦截设计的,每次远程方法执行,该拦截都会被执行。这样就为开发者提供了非常方便的扩展性,比如为dubbo接口实现ip白名单功能、监控功能 、日志记录等。

实现步骤:

  1. 实现 org.apache.dubbo.rpc.Filter 接口
  2. 使用 org.apache.dubbo.common.extension.Activate 接口对进行注册通过group 可以指定生产端 消费端 如:
1
2
3
@Activate(group = {CommonConstants.CONSUMER})
或者
@Activate(group = {CommonConstants.CONSUMER,CommonConstants.PROVIDER})
  1. 业务代码实现
  2. 在 resources/META-INF.dubbo 中新建 org.apache.dubbo.rpc.Filter 文件,并将当前类的全名写入
1
2
# timerFilter=包名.过滤器的名字
timeFilter=com.lagou.filter.DubboInvokeFilter

注意:一般类似于这样的功能都是单独开发依赖的,所以再使用方的项目中只需要引入依赖,在调用接口时,该方法便会自动拦截。

大坑来了

当进行第4步创建resources/META-INF.dubbo目录时,一定要写成META-INF/dubbo形式,记得加/, 否则代码编译后不会生成dubbo目录,进而找不到过滤器文件,导致过滤器功能不生效。

mark

坚持原创技术分享,您的支持将鼓励我继续创作!