From ffcd829a99fc780ac3deb2a19117ec5b22b37d5e Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Sat, 13 Apr 2019 08:30:29 +0800 Subject: [PATCH] Polish spring-cloud-incubator/spring-cloud-alibaba#549 : LoadBalancerInterceptor bean may be missing --- ...BalancedRestTemplateAutoConfiguration.java | 23 ++++++++++++++++--- .../pom.xml | 18 ++++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java index a6afc5a9..978a73fc 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java @@ -35,6 +35,7 @@ import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactor import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor; import org.springframework.cloud.client.loadbalancer.RestTemplateCustomizer; +import org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.EventListener; import org.springframework.core.env.Environment; @@ -56,7 +57,7 @@ import java.util.Map; @Configuration @ConditionalOnClass(name = {"org.springframework.web.client.RestTemplate"}) @AutoConfigureAfter(name = {"org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration"}) -public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClassLoaderAware { +public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClassLoaderAware, SmartInitializingSingleton { private static final Class DUBBO_TRANSPORTED_CLASS = DubboTransported.class; @@ -65,9 +66,12 @@ public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClass @Autowired private DubboServiceMetadataRepository repository; - @Autowired + @Autowired(required = false) private LoadBalancerInterceptor loadBalancerInterceptor; + @Autowired(required = false) + private RetryLoadBalancerInterceptor retryLoadBalancerInterceptor; + @Autowired private ConfigurableListableBeanFactory beanFactory; @@ -86,6 +90,18 @@ public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClass private ClassLoader classLoader; + /** + * The {@link ClientHttpRequestInterceptor} bean that may be {@link LoadBalancerInterceptor} or {@link RetryLoadBalancerInterceptor} + */ + private ClientHttpRequestInterceptor loadBalancerInterceptorBean; + + + @Override + public void afterSingletonsInstantiated() { + loadBalancerInterceptorBean = retryLoadBalancerInterceptor != null ? + retryLoadBalancerInterceptor : + loadBalancerInterceptor; + } /** * Adapt the {@link RestTemplate} beans that are annotated {@link LoadBalanced @LoadBalanced} and @@ -140,7 +156,7 @@ public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClass List interceptors = new ArrayList<>(restTemplate.getInterceptors()); - int index = interceptors.indexOf(loadBalancerInterceptor); + int index = loadBalancerInterceptorBean == null ? -1 : interceptors.indexOf(loadBalancerInterceptorBean); index = index < 0 ? 0 : index; @@ -157,4 +173,5 @@ public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClass public void setBeanClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } + } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml index e3a751d9..fe0b1e8e 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml @@ -21,6 +21,18 @@ spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + org.springframework.retry + spring-retry + + org.springframework.cloud @@ -28,12 +40,6 @@ ${project.version} - - - org.springframework.cloud - spring-cloud-starter-openfeign - -