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
dubbo学习笔记(二)dubbo中的filter的更多相关文章
- Dubbo学习笔记(二) Dubbo的基本配置
Check启动检查 根据之前的学习,我们简单理解的Dubbo远程调用的基本流程,服务提供者注册到注册中心,然后服务消费者通过监听注册中心达到远程调用的目的,那么如果注册中心中没有消费者对应的接口会怎么 ...
- dubbo学习笔记二(服务调用)
项目结构 代码示例 由于之前的IEchoService 的一个方法只是在服务端控制台打印,不便在浏览器测试,所以新添加的方法 api和服务端代码变更 public interface IEchoSer ...
- jQuery学习笔记(二)jQuery中DOM操作
目录 DOM操作分类 jQuery中的各种DOM操作 查找节点 创建节点 删除节点 复制节点 替换节点 包裹节点 属性操作 样式操作 对HTML.文本和值的操作 遍历节点 CSS-DOM操作 小结 本 ...
- redis学习笔记(二)——java中jedis的简单使用
redis怎么在java中使用,那就是要用到jedis了,jedis是redis的java版本的客户端实现,原本原本想上来就直接学spring整合redis的,但是一口吃个胖子,还是脚踏实地,从基础开 ...
- 鸟书shell 学习笔记(二) shell中正則表達式相关
通配符与正則表達式的差别 通配符是bash原生支持的语法,正則表達式是处理字符串的一种表示方式, 正則表達式须要支持的工具支持才干够 语系设置 : export LANG=C grep alias 设 ...
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
随机推荐
- js之正则
1.正则的声明方法 1)var reg = /abc/; "这个叫对象直接量方式": 2)var reg = new RegExp("abc") 这个叫构造函数 ...
- Golang中文乱码问题
在学习golang读取文件的过程中,遇到中文显示乱码的问题!golang没有自带的编解码包,因此需要借助第三方包 解决方法: 引入第三发转码包:git clone https://github.com ...
- Java黑科技之源:JVMTI完全解读
Java生态中有一些非常规的技术,它们能达到一些特别的效果.这些技术的实现原理不去深究的话一般并不是广为人知.这种技术通常被称为黑科技.而这些黑科技中的绝大部分底层都是通过JVMTI实现的. 形象地说 ...
- Idea中SpringBoot引入thymeleaf没有提示
问题描述: 最近使用Idea搭建SpringBoot时,用到了 thymeleaf,但是出现了点问题:输入th: 代码有没有提示. 解决方法: <html lang="en" ...
- [Doxygen].Docygen使用
转自:https://www.cnblogs.com/chenyang920/p/5732643.html Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,可以从一套归档源文 ...
- Linux文本处理sed、软件包管理、磁盘存储、文件系统和挂载
Linux文本处理工具sed.软件包管理.磁盘存储及文件系统 文本处理工具sed巧妙用法 1.通过sed获取文件路径的基名和目录名 思路:采用正则表达式将文本字符串分组,取对应的分组后向引用即可. 获 ...
- Introduction to Linux Threads
Introduction to Linux Threads A thread of execution is often regarded as the smallest unit of proces ...
- 快速的在linux服务器上安装jdk8
1.执行命令 yum -y list java* 查看可安装java版本.执行成功后可以看见如下的结果 选择一个java版本进行安装,这里我们希望安装java1.8,因为我们的机器是64位的,所以选择 ...
- sublime设置代码缩进
打开sublime的首选项(Preferences)下的设置-用户(Setting-User) ,配置如下代码 , "translate_tabs_to_spaces": true ...
- RabbitMQ 的 docker 镜像使用
RabbitMQ 的 docker 镜像使用 1.下载镜像(management版本的才带有web管理界面) docker pull rabbitmq:3.7.18-management 2.创建容器 ...