文档章节

SpringCloud重试机制配置

 万立超
发布于 2017/05/18 23:50
字数 464
阅读 3722
收藏 3

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

Table 1. ribbon重试配置

ribbon.OkToRetryOnAllOperations

false(是否所有操作都重试)

ribbon.MaxAutoRetriesNextServer

2(重试负载均衡其他的实例最大重试次数,不包括首次server)

ribbon.MaxAutoRetries

1(同一台实例最大重试次数,不包括首次调用)

spring.cloud.loadbalancer.retry.enabled

true(重试机制开关)

  ribbon针对http的readTimeout和connectTimeCount直接用配置 ribbon.ReadTimeout和ribbon.ConnectTimeout是无效的。配置方式参考以下代码
@Bean
@LoadBalanced
RestTemplate restTemplate() {
	HttpComponentsClientHttpRequestFactory httpRequestFactory =  new HttpComponentsClientHttpRequestFactory();
	httpRequestFactory.setReadTimeout(5000);
	httpRequestFactory.setConnectTimeout(5000);
	return new RestTemplate(httpRequestFactory);
}

Table 2. zuul重试配置

zuul.retryable

true(重试机制开关)

ribbon.OkToRetryOnAllOperations

false(是否所有操作都重试)

ribbon.MaxAutoRetriesNextServer

2(重试负载均衡其他的实例最大重试次数,不包括首次server)

ribbon.MaxAutoRetries

1(同一台实例最大重试次数,不包括首次调用)

ribbon.ConnectTimeout

6000(http建立socket超时时间)

ribbon.ReadTimeout

6000(http读取响应socket超时时间)

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds

10000(断路器线程池超时时间,这个值一定要比ribbon超时时间长)

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);
}

Last updated 2017-05-18 23:39:30 CST

© 著作权归作者所有

粉丝 4
博文 9
码字总数 5510
作品 0
浦东
私信 提问
SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)

前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡。 SpringCloud Feign Feign 介绍 Feign是一个声明式的Web Servi...

虚无境
01/15
0
0
SpringCloud服务的平滑上下线

吐槽: 以前都是手撸RPC,最近接触 SpringCloud ,深感痛心。主要有以下几点: 1)代码量巨大,找BUG时间长,超级复杂的设计 2)版本管理混乱,经常出现莫名其妙的配置错误(所以2.0是打死不...

Java干货分享
2018/09/29
0
0
SpringCloud Fegin超时重试源码

springCloud中最重要的就是微服务之间的调用,因为网络延迟或者调用超时会直接导致程序异常,因此超时的配置及处理就至关重要。 在开发过程中被调用的微服务打断点发现会又多次重试的情况,测...

xiaomin0322
04/10
0
0
SpringCloud使用Prometheus监控(基于Eureka)

本文介绍SpringCloud使用Prometheus,基于Eureka服务发现。 1.Prometheus介绍 在之前写过两篇有关Prometheus使用的文章,如下: 《SpringBoot使用prometheus监控》 《SpringBoot使用SOFA-Lo...

dalaoyang
03/11
0
0
【Spring Cloud】分布式必学springcloud(一)——简介和看法

一、前言 开篇之前,我想说,springcloud会完胜dubbo。 小编以前做分布式是用的webservice、dubbo。最近的项目中,开始使用了springcloud,springcloud包含了很多的组件,这些组件是dubbo没有...

kisscatforever
2018/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
13分钟前
0
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler...

大头鬼_yc
24分钟前
0
0
centos7修改命令行或图形界面启动模式

1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改启动模式(修改为图形界面,要是修改为命令行就multi-user.target) 2.systemctl set-default multi-...

大圣39
28分钟前
0
0
vue预渲染

prerender-spa-plugin 安装prerender-spa-plugin (插件使用见npm官网)[https://www.npmjs.com/package/prerender-spa-plugin] npm install prerender-spa-plugin --save-dev 配置prerender-s......

莫西摩西
50分钟前
1
0
Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部