From 6a8ebb2217d64b8ff24b3b606ac02b873b021457 Mon Sep 17 00:00:00 2001 From: Kai Date: Fri, 27 Oct 2023 14:59:01 +0800 Subject: [PATCH] =?UTF-8?q?spring=20cloud=202021.x=20=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E9=98=85=E8=AF=BB,=20OpenFeign=20+=20LoadBalancer=20+=20Nacos?= =?UTF-8?q?=20Discovery?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 24 +++++++++---------- .../FeignBlockingLoadBalancerClient.java | 6 ++++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 433be07c..190613f6 100644 --- a/pom.xml +++ b/pom.xml @@ -71,10 +71,10 @@ 1.8 - - org.apache.maven.plugins - maven-checkstyle-plugin - + + + + io.spring.javaformat spring-javaformat-maven-plugin @@ -91,14 +91,14 @@ - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - + + + + + + + + diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java index 6bf5f57d..e130b92a 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java @@ -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 { 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 lbResponse = new DefaultResponse( instance); @@ -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);