Skip to content

fix: harden RPC timeout, threading and configuration - #6

Merged
xiaoyumuxi merged 18 commits into
mainfrom
fix/rpc-reliability-hardening
Sep 14, 2026
Merged

xiaoyumuxi merged 18 commits into
mainfrom
fix/rpc-reliability-hardening

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Owner

本次修复

针对代码审查中优先级最高的可靠性问题进行集中修复:

1. JDK Proxy 复用 RpcClient

  • JdkProxyFactory 不再每次业务方法调用都 new RpcClient()
  • 与 ByteBuddy Proxy 的客户端生命周期保持一致
  • 增加注入式单元测试,防止回归

2. 增加请求级超时与 pending cleanup

  • 新增 rpc.request-timeout-ms,默认 5000ms
  • 每个请求注册超时任务
  • 正常响应、发送异常、连接异常、请求超时都会清理 pending request
  • 避免连接仍存活但单请求无响应时 Future 永久挂起

3. 修复 primitive 参数/返回值

  • 新增 TypeUtils,支持 int/long/boolean/... 等基础类型名称解析
  • 服务端反射参数仍使用 primitive Class,反序列化使用对应包装类型
  • 客户端 primitive 返回值同样使用包装类型反序列化
  • 补充 int add(int, int) 回归测试

4. 业务逻辑移出 Netty EventLoop

  • NettyTransportServer 创建服务级共享、有界业务线程池
  • NettyRpcHandler 只负责投递请求,反序列化、反射和业务方法在业务线程执行
  • 线程池队列满时快速返回“服务器繁忙”,避免无限堆积
  • auto/netty/http/http2/grpc 模式共享同一个业务 Handler
  • 新增测试验证业务方法确实在业务线程执行

5. 统一 Spring Boot -> RpcConfig 配置链路

  • 修复 server-host / registry-address / proxy / load-balancer 等 Starter 配置写入后核心层未读取的问题
  • 新增并贯通:
    • max-message-size
    • request-timeout-ms
    • worker-threads
    • boss-threads
    • business-threads
    • business-queue-capacity
    • max-connections
  • 明确配置优先级:System Properties / Spring Boot > Nacos > 本地 YAML > 默认值
  • Nacos 动态更新后仍保留显式 Spring/JVM 配置的最高优先级

额外修正

  • 让已有 boss-threads / worker-threads 真正用于创建 Netty EventLoopGroup
  • void RPC 返回值不再尝试反序列化空响应体
  • 服务端反射异常会解包 InvocationTargetException,返回更准确的业务异常信息

测试

新增/扩展:

  • JdkProxyFactoryTest
  • RpcClientTest primitive/void case
  • RpcConfigTest 全配置覆盖与非法整数 fallback
  • NettyRpcHandlerTest primitive 参数与业务线程隔离

等待 GitHub Actions 对完整 Maven 构建、单元测试和集成测试进行验证。

@xiaoyumuxi
xiaoyumuxi merged commit ea7dd34 into main Sep 14, 2026
1 of 2 checks passed
@xiaoyumuxi
xiaoyumuxi deleted the fix/rpc-reliability-hardening branch September 14, 2026 06:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant