Files
cn-rdms/rdms-framework/rdms-spring-boot-starter-rpc/README.md
2026-03-11 19:32:37 +08:00

4.7 KiB
Raw Blame History

rdms-spring-boot-starter-rpc

1. 模块现状

当前模块本体基本是空的。

从代码来看,这个模块目前只有:

  • pom.xml 中的依赖声明
  • configcore 两个包下的占位 package-info.java

当前没有实际落地的 RPC 代码。

2. 当前实际作用

这个模块目前的作用,主要是统一引入 RPC 相关基础依赖,包括:

  • spring-cloud-starter-openfeign
  • spring-cloud-starter-loadbalancer
  • feign-okhttp
  • jakarta.validation-api

所以更准确地说它现在是一个“RPC 依赖聚合模块”,而不是一个已经实现完整功能的 RPC starter。

3. 当前不包含的能力

这个模块当前没有提供以下能力:

  • 没有自动配置类
  • 没有 @EnableFeignClients 封装
  • 没有请求拦截器
  • 没有统一异常处理
  • 没有统一重试策略
  • 没有统一降级处理
  • 没有自定义编码器、解码器
  • 没有任何业务侧 RPC 工具类

也就是说,单看这个模块本身,当前还谈不上“功能实现”。

4. 如何理解这个模块

如果结合当前仓库结构来理解,这个模块更适合看作:

  • 先把 RPC 相关依赖收进来
  • 给后续扩展预留模块位置
  • 暂时还没有继续往里面建设实际能力

因此,这个模块当前的关键词不是“功能”,而是“占位”和“依赖聚合”。

5. 这个模块后续适合承接的内容

如果后续要继续建设,这个模块比较适合承接“各业务模块都可能共用的 RPC 通用能力”。

5.1 Feign 统一配置

适合放在这里的内容包括:

  • 统一开启 Feign 所需的基础配置
  • 统一配置超时、连接池、日志级别
  • 统一切换底层 HTTP 客户端

这类内容属于基础设施层,通常不应该散落在各业务模块中。

5.2 请求拦截

这部分正是比较典型、也比较适合放在本模块中的能力。

例如可以统一实现:

  • 请求头透传
  • Token 透传
  • 用户信息透传
  • TraceId / 请求链路标识透传
  • 租户编号透传

常见做法是基于 RequestInterceptor,在所有 Feign 请求发出前统一补充请求头。

5.3 返回结果统一处理

如果希望对所有 OpenFeign 调用结果做统一拦截和异常处理,也适合放在这个模块。

常见做法包括:

  • 通过 ErrorDecoder 统一处理非 2xx 响应
  • 通过自定义 Decoder 统一解析返回体
  • 对返回结果做统一业务异常转换
  • 对远程服务错误码做统一包装

例如:

  • 对方服务返回 404、500 时,统一转成项目内部异常
  • 对方服务返回统一响应结构时,统一判断是否成功
  • 对远程调用超时、连接失败做统一异常封装

5.4 调用日志与问题排查

这类通用能力也适合放在这里:

  • 统一打印 RPC 请求日志
  • 统一打印 RPC 响应日志
  • 记录调用耗时
  • 记录失败原因

这样做的好处是,排查跨服务问题时不需要每个模块各写一套。

5.5 重试、降级与容错

如果项目后续需要增强 RPC 稳定性,也可以在这里统一建设:

  • 重试策略
  • 熔断策略
  • 降级处理
  • 超时兜底

不过这部分是否要做,需要结合项目实际复杂度决定;如果当前系统调用链不复杂,也可以先不引入。

5.6 统一 RPC 规范

这个模块也适合沉淀一些统一约定,例如:

  • 统一返回结构
  • 统一异常码映射
  • 统一 Header 命名
  • 统一调用方与被调用方的接口规范

这样可以避免不同模块各自定义一套 RPC 风格。

6. 是否适合把拦截器和异常处理放在这里

如果这些能力是“针对所有或大多数 OpenFeign 调用都生效”的公共能力,那么放在这个模块是合适的。

原因很直接:

  • 它属于 RPC 基础设施,不属于某个单独业务模块
  • 放在这里可以统一维护,避免重复实现
  • 后续任何模块接入 Feign 时,都可以复用同一套规则

例如你提到的这类需求,就很适合落在这里:

  • 所有 Feign 请求统一加请求头
  • 所有 Feign 返回统一做异常判断
  • 所有远程调用失败统一转换成项目内部异常

如果某个拦截逻辑只服务于单一业务模块,那更适合放在该业务模块自己的 RPC 配置中;如果是全局通用规则,则更适合放在本模块。

7. 结论

rdms-spring-boot-starter-rpc 当前没有真正的功能代码。

如果后续要把它做成一个真正的 RPC starter通常才会逐步补这些内容

  • 自动装配
  • Feign 统一启用
  • 请求头透传
  • 调用日志
  • 异常处理
  • 超时与重试配置
  • 统一 RPC 规范

但以当前仓库代码为准,这些能力都还没有在本模块中实现。