dubbo学习笔记(二)dubbo中的filter
转: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
最新文章
- Go语言实战 - 网站性能优化第一弹&ldquo;七牛云存储&rdquo;
- max server memory
- linux下sendmail邮件系统安装操作记录
- Xamarin.Forms 现已开启对 UWP 的支持
- 使用Areas(区域)分离ASP.NET MVC 项目
- MinHash算法-复杂度待整理
- delphi 创建数据库配置文件(TIniFile)
- Java多线程练习三
- CSS网页元素居中
- 关于mysql的安装
- substr(dirname(__FILE__))
- Linux 二层协议架构组织
- 1381: Munching(BFS)
- ASP.NET Core 依赖注入(DI)简介
- python sorted函数多条件排序是怎么回事
- 使用jenkins进行前端项目自动部署
- .NET Core Agent
- SMB协议原理抓包分析
- Git删除分支/恢复分支
- 造轮子,模仿WPF的UI框架,还没完善。。。
热门文章
- JavaScript的函数call和apply的区别、以及bind方法
- Android 8.0编译过程
- 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置
- 一个tomcat同时部署多个项目
- 【Spring】@PathVariable 获取带点参数,获取不全
- Odoo MRP模块
- Ubuntu 18.10 安装之后做的一点事
- 没有可用的软件包 build-essential,但是它被其他的软件包引用了【解决方法】
- 将java的jar包作为windows的服务来启动
- (十)Kubernetes ConfigMap和Secret