Skip to main content

3.分治逻辑之结构重构

本章没有新功能的迭代更新,更重要的侧重点是,在完整了RPC泛化调用,以及netty服务的启动之后,将结构重新调整,拆分为更明确、清晰的架构

在上个章节中,是两个结构bind、session。

这一章的目录结构拆分为四个,作用如下

  1. bind 代理层 -> 负责处理服务间的通信,支持泛化调用和CGLIB代理
  2. mapping 接口映射信息层 -> 管理接口映射信息,将外部请求映射到相应的处理逻辑,确保请求能够正确路由到对应的处理程序
  3. session 网关会话层 ->管理网关与客户端之间的会话信息,确保会话的安全性和一致性,以及对会话状态的有效管理
  4. socket 协议层 -> 使用Netty处理协议层相关的任务,包括处理网络通信、解析协议、数据传输等,保证网关能够高效处理各种协议的通信

让我们梳理一下新的启动流程

  1. 先从请求映射层的HttpStatement开始,该类存放了本次HTTP请求相关的信息,比如请求的应用、接口名称、方法名称、uri、接口类型 请注意,请求信息(HttpStatement),也就是本章节包括后续所说的Mapper ,参考Mybatis源码概念
  2. 在我们构建完成本次请求信息后,将本次请求信息,添加到配置文件中(Configuration),最后存放在Configuration里面的MapperRegister 接口变动往往比较小,我们通过缓存,缓存每次构建好的请求信息,这样能够提升我们的性能,但是需要注意的是,当服务重新上下线后,我们需要清除对应的信息,以防止后续调用错误的请求信息
  3. 启动DefaultGatewaySessionFactory,通过默认的网关会话中的openSession启动DefaultGatewaySessionDefaultGatewaySession是默认的网关会话。也就是针对本次配置文件构建一个Dubbo的泛化调用(GenericService
  4. 我们已经构建好一个调用方信息,只需要从http层进行请求,网关会通过会话处理器(GatewayServerHandler)进行调用。因此第四步就是通过GatewaySocketServer启动netty服务。

让我们在完整的从用户方发起请求开始,梳理一下执行流程

到此,第三章结构重构就完成了