Filter 过滤器动态拦截请求(request)或响应(response)以转换或使用请求或响应中包含的信息。过滤器本身通常不会创建响应,而是提供可以“附加”到任何一次 RPC 请求的通用函数。Dubbo Filter 是可插拔的,我们可以在一次 RPC 请求中插入任意类型的、任意多个 Filter。
Filter 工作原理如下图所示:
Filter 定义如下:
Filter 可以加载在 Consumer 端或者 Provider端。当加载在 Consumer 端,其Invoke函数调用的下游为网络层,OnResponse 为请求结束从网络层获取到返回结果后被调用。当加载在 Provider 端,其 Invoke 函数调用的下游为用户代码,OnResponse 为用户代码执行结束后向下传递至网络层前被调用。
Filter 采用面向切面设计的思路,通过对 Filter 的合理扩展,可以记录日志、设置数据打点,记录 invoker 所对应服务端性能,限流等等工作。
框架预定义了一系列filter,可以在配置中直接使用,其代码实现位于 filter
用户在配置文件中配置了自定义 Filter 加载策略时,框架将同时加载用户配置的 filters 和默认 filters,否则仅加载默认 filters。当前版本默认激活的 filter 列表如下:
用户可在代码中自定义 Filter,注册到框架上,并在配置中选择使用。
可通过以下链接学习如何使用 API 配置和启用 Filter 的 完整示例源码地址