转:https://www.cnblogs.com/cdfive2018/p/10219730.html

dubbo框架提供了filter机制的扩展点(本文基于dubbo2.6.0版本)。

扩展接口

在dubbo-rpc模块下的dubbo-rpc-api模块下定义了Filter接口:org.apache.dubbo.rpc.Filter

dubbo自带的filter

dubbo框架自带了22个Filter。

在dubbo-rpc-api模块提供了15个filter:

AccessLogFilter
ActiveLimitFilter
ClassLoaderFilter
CompatibleFilter
ConsumerContextFilter
ContextFilter
DeprecatedFilter
EchoFilter
ExceptionFilter
ExecuteLimitFilter
GenericFilter
GenericImplFilter
TimeoutFilter
TokenFilter
TpsLimitFilter

dubbo-rpc-default模块提供了2个filter:

FutureFilter
TraceFilter

dubbo-filter模块有2个子模块,提供了2个filter:

dubbo-filter-cache提供了1个Filter:CacheFilter
dubbo-filter-validation提供了1个Filter:ValidationFilter

dubbo-test-examples提供了1个filter:

LogFilter

dubbo-spring-config提供了1个filter:

MockFilter

dubbo-monitor-api提供了1个filter:

MonitorFilter

Filter加载

dubbo应用启动时,通过ProtocolFilterWrapper#buildInvokerChain构建了filter的调用链。
启用demo应用,在buildInvokerChain方法的List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);下一行打个断点,
在调试窗口看观察List<Filter> filters的值,

provider端:

consumer端:

Filter加载顺序

系统自带的filter,上面的图可以可以看到,
provider端:EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->TraceFilter->TimeoutFilter->MonitorFilter->ExceptionFilter
consumer端:ConsumerContextFilter->FutureFilter->MonitorFilter

@Active注解定义了Filter的位置和顺序,其中group属性定义了该Filter用于Provider或Consumer端,order属性定义了Filter的绝对顺序(数值小的排在前面)。

EchoFilter为例

@Activate(group = Constants.PROVIDER, order = -110000)
public class EchoFilter implements Filter {
...
}

表示在Provder端使用,绝对顺序为-110000。

ClassLoaderFilter

@Activate(group = Constants.PROVIDER, order = -30000)
public class ClassLoaderFilter implements Filter {
...
}

表示在Provder端使用,绝对顺序为-30000,值比-110000大,因此在EchoFilter的后面调用。

Filter功能

  • EchoFilter

回声测试。

  • ExceptionFilter

异常处理。


参考:
http://dubbo.apache.org/zh-cn/docs/dev/impls/filter.html

最新文章

  1. Go语言实战 - 网站性能优化第一弹&ldquo;七牛云存储&rdquo;
  2. max server memory
  3. linux下sendmail邮件系统安装操作记录
  4. Xamarin.Forms 现已开启对 UWP 的支持
  5. 使用Areas(区域)分离ASP.NET MVC 项目
  6. MinHash算法-复杂度待整理
  7. delphi 创建数据库配置文件(TIniFile)
  8. Java多线程练习三
  9. CSS网页元素居中
  10. 关于mysql的安装
  11. substr(dirname(__FILE__))
  12. Linux 二层协议架构组织
  13. 1381: Munching(BFS)
  14. ASP.NET Core 依赖注入(DI)简介
  15. python sorted函数多条件排序是怎么回事
  16. 使用jenkins进行前端项目自动部署
  17. .NET Core Agent
  18. SMB协议原理抓包分析
  19. Git删除分支/恢复分支
  20. 造轮子,模仿WPF的UI框架,还没完善。。。

热门文章

  1. JavaScript的函数call和apply的区别、以及bind方法
  2. Android 8.0编译过程
  3. 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置
  4. 一个tomcat同时部署多个项目
  5. 【Spring】@PathVariable 获取带点参数,获取不全
  6. Odoo MRP模块
  7. Ubuntu 18.10 安装之后做的一点事
  8. 没有可用的软件包 build-essential,但是它被其他的软件包引用了【解决方法】
  9. 将java的jar包作为windows的服务来启动
  10. (十)Kubernetes ConfigMap和Secret