场景
需要通过Feign Client请求,其他注册中心或者其他Restful服务。
临时方案
Feign 请求转为RestTemplate http请求。
优点:能适应,feign环境和非feign环境
缺点:需要提供两套代码。一套spi,支持feign,一套SDK,支持http。
解决方案
FeignClient 使用url配置,使用placeHolder,注入url的值
方案验证
场景还原,搭建以下环境
- 注册中心1:
eureka1 - 注册中心2:
eureka2 - 服务提供者1:
provider1,注册到eureka1 - 服务提供者2:
provider2,注册到eureka2 - 服务消费者:
consumer1&2,注册到eureka1
Eureka1&Provider1
Eureka2&Provider2
Eureka1&Consumer
验证
浏览器请求consumer
provider1
provider2
源码分析
在应用启动的时候,会初始化FeignClient接口。
根据url,是否有值,创建负载均衡客户端。
Provider1,创建LoadBalancerFeignClient
Provider2,不创建LoadBalancerFeignClient
consumer发起请求的时候,provider1通过 LoadBalancerFeignClient 获取可用的服务提供者。
provider2,跳过LoadBalancerFeignClient ,直接发起request请求