From c7c0d1793bcd260839f5563040029ec9bebf24f7 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Wed, 27 Sep 2023 12:01:19 +0800 Subject: [PATCH] fix:fix retry loadbalancer not working bug. (#1155) --- CHANGELOG.md | 3 ++- .../PolarisLoadBalancerAutoConfiguration.java | 14 +++++++++----- .../discovery-caller-service/pom.xml | 5 +++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b85e789f..e0fcc204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,4 +8,5 @@ - [feat:support service contract reporting.](https://github.com/Tencent/spring-cloud-tencent/pull/1141) - [feat: support log path configuration parameters,](https://github.com/Tencent/spring-cloud-tencent/pull/1142) - [feat:add swagger report switch.](https://github.com/Tencent/spring-cloud-tencent/pull/1150) -- [fix: dynamic routing using cookies.](https://github.com/Tencent/spring-cloud-tencent/pull/1153) \ No newline at end of file +- [fix: dynamic routing using cookies.](https://github.com/Tencent/spring-cloud-tencent/pull/1153) +- [fix:fix retry loadbalancer not working bug.](https://github.com/Tencent/spring-cloud-tencent/pull/1155) diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java index 8ee742d6..df296cd5 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java @@ -25,12 +25,12 @@ import com.tencent.cloud.rpc.enhancement.resttemplate.EnhancedRestTemplateInterc import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor; import org.springframework.cloud.client.loadbalancer.RestTemplateCustomizer; +import org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; import org.springframework.context.annotation.Bean; @@ -52,19 +52,23 @@ import org.springframework.http.client.ClientHttpRequestInterceptor; public class PolarisLoadBalancerAutoConfiguration { @Bean - @ConditionalOnMissingBean - public RestTemplateCustomizer restTemplateCustomizer(@Autowired(required = false) LoadBalancerInterceptor loadBalancerInterceptor) { + public RestTemplateCustomizer restTemplateCustomizer( + @Autowired(required = false) RetryLoadBalancerInterceptor retryLoadBalancerInterceptor, + @Autowired(required = false) LoadBalancerInterceptor loadBalancerInterceptor) { return restTemplate -> { List list = new ArrayList<>(restTemplate.getInterceptors()); // LoadBalancerInterceptor must invoke before EnhancedRestTemplateInterceptor - if (loadBalancerInterceptor != null) { + if (retryLoadBalancerInterceptor != null || loadBalancerInterceptor != null) { int addIndex = list.size(); for (int i = 0; i < list.size(); i++) { if (list.get(i) instanceof EnhancedRestTemplateInterceptor) { addIndex = i; } } - list.add(addIndex, loadBalancerInterceptor); + list.add(addIndex, + retryLoadBalancerInterceptor != null + ? retryLoadBalancerInterceptor + : loadBalancerInterceptor); } restTemplate.setInterceptors(list); }; diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml index c495c5ee..e48eeb15 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml @@ -29,6 +29,11 @@ spring-cloud-starter-tencent-polaris-contract + + + + +