RPC同步调用
引用文件
本文引用的文件
- yudao-spring-boot-starter-rpc/pom.xml
- YudaoEnvRpcAutoConfiguration.java
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- EnvRequestInterceptor.java
- EnvUtils.java
- YudaoTenantRpcAutoConfiguration.java
- YudaoOperateLogRpcAutoConfiguration.java
- YudaoApiLogRpcAutoConfiguration.java
- YudaoDictRpcAutoConfiguration.java
- application.yaml
目录
简介
本技术文档围绕 yudao-cloud 的 RPC 同步调用能力展开,重点讲解基于 OpenFeign 的声明式服务调用实现,涵盖接口定义、参数与响应处理、服务发现与负载均衡、以及服务降级与熔断等关键主题。同时给出配置方法(超时、重试、熔断器)、最佳实践与排障建议,帮助开发者正确、稳定地使用 RPC 调用功能。
项目结构
yudao-cloud 将 RPC 能力以 Spring Boot Starter 的形式封装,核心位于 yudao-spring-boot-starter-rpc,并通过环境与租户等自动配置模块扩展 Feign 的能力,如多环境标签透传、按 tag 过滤服务实例、以及统一的请求拦截器等。
图表来源
- yudao-spring-boot-starter-rpc/pom.xml
- YudaoEnvRpcAutoConfiguration.java
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- EnvRequestInterceptor.java
- EnvUtils.java
- YudaoTenantRpcAutoConfiguration.java
- YudaoOperateLogRpcAutoConfiguration.java
- YudaoApiLogRpcAutoConfiguration.java
- YudaoDictRpcAutoConfiguration.java
- application.yaml
章节来源
核心组件
- OpenFeign 与 OkHttp:提供声明式 HTTP 客户端能力,底层使用 OkHttp 作为 HTTP 客户端。
- Spring Cloud LoadBalancer:提供客户端侧负载均衡能力,支持按 tag 过滤服务实例。
- Resilience4j 熔断器:为 Feign 提供降级与熔断能力。
- 环境与多环境标签:通过请求拦截器将 tag 透传至下游服务,结合 EnvLoadBalancerClient 实现按 tag 的服务实例筛选。
- 业务自动配置:租户、操作日志、API 日志、字典等模块通过 EnableFeignClients 引入对应 API 接口,自动启用 Feign 客户端。
章节来源
- yudao-spring-boot-starter-rpc/pom.xml
- YudaoEnvRpcAutoConfiguration.java
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- EnvRequestInterceptor.java
- YudaoTenantRpcAutoConfiguration.java
- YudaoOperateLogRpcAutoConfiguration.java
- YudaoApiLogRpcAutoConfiguration.java
- YudaoDictRpcAutoConfiguration.java
架构总览
下图展示了 RPC 同步调用在 yudao-cloud 中的整体架构:应用通过@EnableFeignClients启用Feign客户端,自动装配OpenFeign、OkHttp与Resilience4j;负载均衡由Spring Cloud LoadBalancer提供,EnvLoadBalancerClientFactory与EnvLoadBalancerClient实现按tag过滤与随机权重选择;EnvRequestInterceptor负责将tag透传到下游服务。
图表来源
- YudaoEnvRpcAutoConfiguration.java
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- EnvRequestInterceptor.java
组件详解
OpenFeign 与 OkHttp 配置
- 依赖引入:OpenFeign、OkHttp、LoadBalancer、Resilience4j 等。
- OkHttp 作为底层 HTTP 客户端,提升连接复用与性能。
- Resilience4j 为 Feign 提供熔断与降级能力,配合 fallbackFactory 使用。
章节来源
负载均衡与多环境标签
- EnvLoadBalancerClientFactory:在创建 ReactiveLoadBalancer 时,包装为 EnvLoadBalancerClient,实现按 tag 过滤服务实例。
- EnvLoadBalancerClient:根据当前上下文的 tag,优先筛选匹配的实例;若无匹配实例则回退到全部实例,再通过 Nacos 提供的随机权重算法选择目标实例。
- EnvRequestInterceptor:在 Feign 请求中将 tag 写入请求头,透传给下游服务。
- EnvUtils:提供 tag 的读取、设置与主机名解析等工具方法。
图表来源
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- EnvRequestInterceptor.java
- EnvUtils.java
章节来源
- YudaoEnvRpcAutoConfiguration.java
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- EnvRequestInterceptor.java
- EnvUtils.java
业务模块的 Feign 自动配置
- 租户模块:通过 @EnableFeignClients 引入 TenantApi,自动装配租户相关的 Feign 客户端与请求拦截器。
- 操作日志模块:引入 OperateLogApi,自动启用 Feign 客户端。
- API 日志模块:引入 ApiAccessLogApi 与 ApiErrorLogApi,自动启用 Feign 客户端。
- 字典模块:引入 DictDataApi,自动启用 Feign 客户端。
图表来源
- YudaoTenantRpcAutoConfiguration.java
- YudaoOperateLogRpcAutoConfiguration.java
- YudaoApiLogRpcAutoConfiguration.java
- YudaoDictRpcAutoConfiguration.java
章节来源
- YudaoTenantRpcAutoConfiguration.java
- YudaoOperateLogRpcAutoConfiguration.java
- YudaoApiLogRpcAutoConfiguration.java
- YudaoDictRpcAutoConfiguration.java
服务发现、负载均衡与服务降级
- 服务发现:通过 Spring Cloud LoadBalancer 与注册中心集成,自动拉取服务实例列表。
- 负载均衡:EnvLoadBalancerClientFactory 包装负载均衡器,EnvLoadBalancerClient 根据 tag 过滤实例并进行随机权重选择。
- 服务降级:通过 Resilience4j 为 Feign 提供熔断与降级能力,结合 fallbackFactory 实现优雅降级。
章节来源
- YudaoEnvRpcAutoConfiguration.java
- EnvLoadBalancerClientFactory.java
- EnvLoadBalancerClient.java
- yudao-spring-boot-starter-rpc/pom.xml
RPC 调用配置方法(超时、重试、熔断器)
- 超时与连接池:通过 OkHttp 客户端配置连接超时、读取超时、写入超时等参数。
- 重试策略:可结合 Resilience4j 或 Feign 自带的重试机制,针对幂等请求进行重试。
- 熔断器:启用 Resilience4j,配置熔断阈值、滑动窗口、慢调用比例等参数,配合 fallbackFactory 实施降级。
- 负载均衡:通过 LoadBalancerClientFactory 与 EnvLoadBalancerClient 实现按 tag 的实例筛选与权重选择。
章节来源