首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…
一 . 前言
上一篇看完了 Dubbo 3.0 的 Server 端接收 , 这一篇来看一下 Dubbo 的过滤链 . 过滤链也是整个流程中非常重要的一环 .
二 . 处理的起点
1 | java复制代码// 调用逻辑 |
2.1 Invoke 发起流程
1 | java复制代码// 上一篇文章已经看过了 , 通过构建一个 ExchangeHandlerAdapter 发起 reply 调用 |
2.2 Filter 链构建流程
1 | java复制代码C- FilterChainBuilder |
2.3 Filter 链的调用结构
1 | java复制代码// 来看一下 FilterChainBuilder , 他的核心对象是其中的一个内部类 |
SPI 可以看一下 @ juejin.cn/post/698945…
2.4 Dubbo 3.0 对比 Dubbo 2.0 的区别
2 者最大的区别在于 Filter 的机构变动 ,
1 | java复制代码// Step 1 : Filter 结构 |
三 . Filter 链
Filter 体系结构
主要的 Filter 的列表如下 :
- EchoFilter
- ClassLoaderFilter
- GenericFilter
- ContextFilter
- ExceptionFilter
- MonitorFilter
- TimeoutFilter
- TraceFilter
3.1 EchoFilter
ECHO 表示回声 , 该类的作用主要是为了检测服务是否可用
1 | java复制代码public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException { |
3.2 ClassLoaderFilter
该 Filter 主要为了对 ClassLoader 进行二次处理
1 | java复制代码// 将当前执行线程类 ClassLoader 设置为服务接口的类 ClassLoader |
3.3 GenericFilter
GenericFilter 同样实现了2个接口 : Filter, Filter.Listener , 这就意味着会有 Response 处理 ,
TODO : GenericFilter 这个类主要用途还没搞清楚 ,而且这个类太长了, 后面搞清楚了再开一个单章
1 | java复制代码GenericFilter implements Filter, Filter.Listener |
3.4 ContextFilter
ContextFilter 主要是对上下文进行处理 , 上下文中存放的是当前调用过程中所需的环境信息
1 | java复制代码static { |
3.5 ExceptionFilter
ExceptionFilter 主要是针对 response 返回中的异常进行处理
1 | java复制代码@Override |
3.6 MonitorFilter
MonitorFilter 用于监控操作 ,他会 调用截取器,并将收集关于此调用的调用数据并将其发送到监视中心
1 | java复制代码// Invoke 流程 |
3.7 TimeoutFilter
对超时情况进行处理
1 | java复制代码@Override |
3.8 TraceFilter
这个 Filter 主要对请求进行跟踪 , 该对象中存在一个集合用于维护 TRACES Key 和 Channel 的列表 , 在 invoke 调用完成后 , 会将日志发送到相关的 Channel 中
主要是监听 某个接口的任意方法或者某个方法 n次
1 | java复制代码// 这里涉及到一个主要的集合 |
总结
- Filter 链通过 SPI 加载
- Filter 链通过 FilterChainBuilder 构建
- Filter 中通过 invocation.getObjectAttachments() 获取属性
这篇文章深度不大 , 主要是由于笔者还在表层学习 , 第二由于这篇文章是一个概括性的文章 , 后续要慢慢的深入 Dubbo 3.0 相关
本文转载自: 掘金