Spring Cloud LoadBalancer替代Ribbon后OpenFeign继承特性是否可用?
问题解答
核心结论
你完全可以沿用之前基于Feign接口继承的用法,不需要更换为RestTemplate或手动通过DiscoveryClient实现负载均衡。Spring Cloud Loadbalancer已经原生支持为OpenFeign赋能负载均衡能力,原有Feign客户端的写法、spring-cloud-feign-inheritance特性都可以正常使用,不需要做业务代码的修改。
适配操作步骤
- 第一步:调整依赖配置,排除原有的Ribbon相关依赖,引入Spring Cloud Loadbalancer依赖
如果你使用Spring Cloud 2020.0.x(代号Ilford)及以上版本,
spring-cloud-starter-openfeign已经默认排除了Ribbon依赖,只需要额外引入spring-cloud-starter-loadbalancer即可 - 第二步:添加配置关闭Ribbon默认启用(仅Spring Boot 2.4.x对应Spring Cloud 2020.x版本需要)
spring.cloud.loadbalancer.ribbon.enabled=false - 第三步:原有配置和代码保持不变即可
- Consul作为服务注册中心的原有配置不需要调整,Spring Cloud Loadbalancer会自动从Consul拉取对应服务ID的实例列表
- 你之前定义的公共接口、继承接口的
@FeignClient客户端都可以直接正常使用,调用方式和之前使用Ribbon时完全一致:// 公共接口定义完全不变 interface Greeting { @GetMapping String hello(String name); } // Feign客户端定义完全不变 @FeignClient(name="my-service-id") interface GreetingClient extends Greeting { }
逻辑说明
Spring Cloud Openfeign的负载均衡层做了抽象,和具体的负载均衡实现解耦。Ribbon和Spring Cloud Loadbalancer都只是该抽象层的具体实现,替换实现组件不会影响上层的Feign调用逻辑、接口继承特性,你之前的业务用法可以完全兼容。
内容的提问来源于stack exchange,提问作者Flavio Oliva
相关产品推荐
相关产品推荐

