3.分治逻辑之结构重构
本章没有新功能的迭代更新,更重要的侧重点是,在完整了RPC泛化调用,以及netty服务的启动之后,将结构重新调整,拆分为更明确、清晰的架构
在上个章节中,是两个结构bind、session。
这一章的目录结构拆分为四个,作用如下
- bind 代理层 -> 负责处理服务间的通信,支持泛化调用和CGLIB代理
- mapping 接口映射信息层 -> 管理接口映射信息,将外部请求映射到相应的处理逻辑,确保请求能够正确路由到对应的处理程序
- session 网关会话层 ->管理网关与客户端之间的会话信息,确保会话的安全性和一致性,以及对会话状态的有效管理
- socket 协议层 -> 使用Netty处理协议层相关的任务,包括处理网络通信、解析协议、数据传输等,保证网关能够高效处理各种协议的通信
让我们梳理一下新的启动流程
- 先从请求映射层的
HttpStatement
开始,该类存放了本次HTTP请求相关的信息,比如请求的应用、接口名称、方法名称、uri、接口类型 请注意,请求信息(HttpStatement
),也就是本章节包括后续所说的Mapper ,参考Mybatis源码概念 - 在我们构建完成本次请求信息后,将本次请求信息,添加到配置文件中(
Configuration
),最后存放在Configuration
里面的MapperRegister
接口变动往往比较小,我们通过缓存,缓存每次构建好的请求信息,这样能够提升我们的性能,但是需要注意的是,当服务重新上下线后,我们需要清除对应的信息,以防止后续调用错误的请求信息 - 启动
DefaultGatewaySessionFactory
,通过默认的网关会话中的openSession启动DefaultGatewaySession
,DefaultGatewaySession
是默认的网关会话。也就是针对本次配置文件构建一个Dubbo的泛化调用(GenericService
) - 我们已经构建好一个调用方信息,只需要从http层进行请求,网关会通过会话处理器(
GatewayServerHandler
)进行调用。因此第四步就是通过GatewaySocketServer
启动netty服务。
让我们在完整的从用户方发起请求开始,梳理一下执行流程
到此,第三章结构重构就完成了