場景
需要通過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請求

