@ -15,7 +15,7 @@
@@ -15,7 +15,7 @@
* /
package org.springframework.cloud.openfeign.loadbalancer ;
// comment-by-kai 源码阅读 spring cloud 2021.x
import java.io.IOException ;
import java.net.URI ;
import java.nio.charset.StandardCharsets ;
@ -94,6 +94,8 @@ public class FeignBlockingLoadBalancerClient implements Client {
@@ -94,6 +94,8 @@ public class FeignBlockingLoadBalancerClient implements Client {
loadBalancerClientFactory . getInstances ( serviceId , LoadBalancerLifecycle . class ) ,
RequestDataContext . class , ResponseData . class , ServiceInstance . class ) ;
supportedLifecycleProcessors . forEach ( lifecycle - > lifecycle . onStart ( lbRequest ) ) ;
// loadBalancerClient根据serviceId,选择合适的ServiceInstance
ServiceInstance instance = loadBalancerClient . choose ( serviceId , lbRequest ) ;
org . springframework . cloud . client . loadbalancer . Response < ServiceInstance > lbResponse = new DefaultResponse (
instance ) ;
@ -108,6 +110,8 @@ public class FeignBlockingLoadBalancerClient implements Client {
@@ -108,6 +110,8 @@ public class FeignBlockingLoadBalancerClient implements Client {
return Response . builder ( ) . request ( request ) . status ( HttpStatus . SERVICE_UNAVAILABLE . value ( ) )
. body ( message , StandardCharsets . UTF_8 ) . build ( ) ;
}
// 重构URL,替换serviceId为实际的通信地址
String reconstructedUrl = loadBalancerClient . reconstructURI ( instance , originalUri ) . toString ( ) ;
Request newRequest = buildRequest ( request , reconstructedUrl ) ;
LoadBalancerProperties loadBalancerProperties = loadBalancerClientFactory . getProperties ( serviceId ) ;