在 SOFA RPC 框架中,com.alipay.sofa.rpc.invoke.Invoker
接口是整个调用体系的核心,它定义了服务调用的基本方法 invoke(SofaRequest request)
。以下是基于该接口的调用体系中各个类的详细使用方法和使用场景。
1. 初始化阶段(调用链构建)
ClientProxyInvoker
作为客户端调用入口,通过FilterChain.buildConsumerChain()
构建过滤器链- 过滤器链按顺序包装多个
FilterInvoker
(如日志、超时、限流等),末端连接ConsumerInvoker
- 每个
FilterInvoker
持有下一个过滤器的引用,形成责任链模式
2. 调用阶段(核心流程)
- 代理层转发:业务客户端调用代理对象,由
JDKInvocationHandler
将方法调用转为SofaRequest
对象 - ClientProxyInvoker 预处理:
- 包装请求(如添加协议头、设置调用上下文)
- 触发调用开始事件(可用于监控、追踪)
- 过滤器链执行:
- 按顺序执行各
FilterInvoker
(如日志过滤器记录请求参数,超时过滤器设置超时阈值) - 每个过滤器处理后调用下一个过滤器,最终到达
ConsumerInvoker
- 按顺序执行各
- ConsumerInvoker 核心操作:
- 设置目标服务的应用名(用于服务路由)
- 通过
Cluster
组件发起集群调用
- 集群与网络层:
Cluster
结合负载均衡器选择合适的服务提供者- 通过协议客户端(如 NettyClient)进行网络传输
- 响应返回:
- 响应沿原调用链逆向返回,经过各过滤器的后置处理(如超时校验、日志记录)
ClientProxyInvoker
触发调用结束事件,包装响应后返回给代理层- 最终解析为业务对象返回给客户端
3. 核心类职责边界
ClientProxyInvoker
:客户端调用入口,负责事件触发和请求 / 响应包装FilterInvoker
:过滤器包装器,实现横切逻辑(日志、超时、权限等),用于实现过滤器的链式调用ConsumerInvoker
:末端调用器,衔接集群层,处理客户端特定逻辑FilterChain
:管理过滤器链的创建和执行顺序