SpringCloud重试机制配置详解

首先声明一点,这里的重试并不是报错以后的重试,而是负载均衡客户端发现远程请求实例不可到达后,去重试其他实例。

@Bean

@LoadBalanced

RestTemplate restTemplate() {

HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();

httpRequestFactory.setReadTimeout(5000);

httpRequestFactory.setConnectTimeout(5000);

return new RestTemplate(httpRequestFactory);

}

feign重试机制 

feign默认是通过自己包下的Retryer进行重试配置,默认是5次

package feign;

import static java.util.concurrent.TimeUnit.SECONDS;

/**

* Cloned for each invocation to {@link Client#execute(Request, feign.Request.Options)}.

* Implementations may keep state to determine if retry operations should continue or not.

*/

public interface Retryer extends Cloneable {

/**

* if retry is permitted, return (possibly after sleeping). Otherwise propagate the exception.

*/

void continueOrPropagate(RetryableException e);

Retryer clone();

public static class Default implements Retryer {

private final int maxAttempts;

private final long period;

private final long maxPeriod;

int attempt;

long sleptForMillis;

public Default() {

this(100, SECONDS.toMillis(1), 5);

}

public Default(long period, long maxPeriod, int maxAttempts) {

this.period = period;

this.maxPeriod = maxPeriod;

this.maxAttempts = maxAttempts;

this.attempt = 1;

}

feign取消重试

@Bean

Retryer feignRetryer() {

return Retryer.NEVER_RETRY;

}

feign请求超时设置

@Bean

Request.Options requestOptions(ConfigurableEnvironment env){

int ribbonReadTimeout = env.getProperty("ribbon.ReadTimeout", int.class, 6000);

int ribbonConnectionTimeout = env.getProperty("ribbon.ConnectTimeout", int.class, 3000);

return new Request.Options(ribbonConnectionTimeout, ribbonReadTimeout);

}

以上是 SpringCloud重试机制配置详解 的全部内容, 来源链接: utcz.com/z/329081.html

回到顶部