Skip to content
Merged
Prev Previous commit
Next Next commit
Add BlockingLoadBalancedRetryPolicy to autoconfiguration. Set default…
… retryableStatusCode prop. Fix javadoc.
  • Loading branch information
OlgaMaciaszek committed Sep 23, 2020
commit c84fa6a85556f1073da19f68bedad3a1c25651bb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.springframework.cloud.client.loadbalancer;

import java.util.HashSet;
import java.util.Set;

import org.springframework.boot.context.properties.ConfigurationProperties;
Expand Down Expand Up @@ -51,7 +52,7 @@ public class LoadBalancerRetryProperties {
/**
* A {@link Set} of status codes that should trigger a retry.
*/
private Set<Integer> retryableStatusCodes;
private Set<Integer> retryableStatusCodes = new HashSet<>();

/**
* Returns true if the load balancer should retry failed requests.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@

/**
* A {@link LoadBalancedRetryPolicy} implementation for
* {@link BlockingLoadBalancerClient}. Based on `RibbonLoadBalancedRetryPolicy` to achieve
* feature-parity.
* {@link BlockingLoadBalancerClient}. Based on <code>RibbonLoadBalancedRetryPolicy</code>
* to achieve feature-parity.
*
* @author Olga Maciaszek-Sharma
* @since 2.2.6
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,21 @@
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration;
import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryFactory;
import org.springframework.cloud.client.loadbalancer.LoadBalancerRetryProperties;
import org.springframework.cloud.client.loadbalancer.reactive.OnNoRibbonDefaultCondition;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient;
import org.springframework.cloud.loadbalancer.blocking.retry.BlockingLoadBalancedRetryFactory;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.retry.support.RetryTemplate;
import org.springframework.web.client.RestTemplate;

/**
Expand Down Expand Up @@ -73,6 +79,22 @@ public BlockingLoadBalancerClient blockingLoadBalancerClient(
return new BlockingLoadBalancerClient(loadBalancerClientFactory);
}

@Configuration
@ConditionalOnClass(RetryTemplate.class)
@EnableConfigurationProperties(LoadBalancerRetryProperties.class)
protected static class BlockingLoadBalancerRetryConfig {

@Bean
// Allow users to override the factory while avoiding loading
// RibbonLoadBalancedRetryFactory.
@Order(1000)
LoadBalancedRetryFactory loadBalancedRetryFactory(
LoadBalancerRetryProperties retryProperties) {
return new BlockingLoadBalancedRetryFactory(retryProperties);
}

}

}

static class BlockingLoadBalancerClientRibbonWarnLogger {
Expand Down