dubbo是一个特别棒的soa框架,但是有时候我们会考虑对其进行扩展,实现一些自定义的功能。今天我们就来简单说说通过dubbo提供的com.alibaba.dubbo.rpc.Filter接口实现自定义的拦截器,扩展dubbo的功能。
dubbo Filter是责任链模式的一种实现方式,类似于servlet中的filter、mybatis中的plugin等都使用了责任链模式,只是各自实现的方式有些差异,但都能达到异曲同工之妙。
我们通常会用dubbo的Filter来实现一些比较有意思的功能,比如在服务消费方(consumer)实现一个本地缓存、在服务提供方(Provider)实现日志记录、耗时最终、异步上报等。
此处以服务提供方实现日志记录为例:
代码写好了,由于我们的项目是基于springboot的,我们在src/main/resources创建META-INF/dubbo目录,在src/main/resources/META-INF/dubbo新建一个文件名“com.alibaba.dubbo.rpc.Filter”的文件,里面的内容如下:
我的dubbo相关的配置是放到res目录中的,有两个文件,dubbo-interfaces.xml和dubbo.properties。springboot的相关配置类如下:
dubbo.properties文件如下:
dubbo-interfaces.xml文件如下:
dubbo-interfaces.xml中filter=”dubboLogFilter”就是我们刚刚上文提到的拦截器。