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