SpringCloud重试retry是一个很赞的功能,能够有效的处理单点故障的问题。主要功能是当请求一个服务的某个实例时,譬如你的User服务启动了2个,它们都在eureka里注册了,那么正常情况下当请求User服务时,ribbon默认会轮询这两个实例。此时如果其中一个实例故障了,发生了宕机或者超时等,如果没有配置启用重试retry策略,那么调用方就会得到错误信息或者超时无响应或者是熔断返回的信息。我们希望的自然是一个故障了,会自动切换到另一个去访问。

最简单的方法就是retry。

需要先在pom.xml里加入

<dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency>

ribbon、zuul、feign都可以配置各自的retry方式。

1 ribbon配置如下

@Bean
@LoadBalanced
RestTemplate restTemplate() {HttpComponentsClientHttpRequestFactory httpRequestFactory =  new HttpComponentsClientHttpRequestFactory();httpRequestFactory.setReadTimeout(5000);httpRequestFactory.setConnectTimeout(5000);return new RestTemplate(httpRequestFactory);
}

2 zuul配置如下

zuul的重试比较简单,不需要任何代码,直接在yml里配置即可。
注意,配置时,ribbon开头的在yml里是不给提示的,不要以为不提示就是没效果,其实是可以用的。
这个ReadTimeout和ConnectTimeout区别是很大的,ConnectTimeout是指建立连接的时间,如果目标服务宕机或网络故障,那么响应的就是ConnectTimeout,无法连接。而ReadTimeout则是连接建立后,等待目标服务返回响应的时间,譬如目标服务做了一个复杂操作导致耗时较长,那么会触发ReadTimeout。
譬如zuul路由了/user路径到user服务上,如果User1实例宕机了,那么配置了retry的zuul就会在重试MaxAutoRetries次数后,切换到另一个实例User2上。如果User2也故障了,那么返回404.
retryableStatusCodes里面有几个错误码,意思就是遇到哪些错误码时触发重试。默认是404,我多配了几个,仅供参考。

3 feign配置如下

feign默认是通过自己包下的Retryer进行重试配置,默认是5次
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取消重试

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

参考:http://www.cnblogs.com/zhangjianbin/p/7228606.html

SpringCloud重试机制配置相关推荐

  1. php数据库连接重试机制,SpringCloud重试机制配置详解

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

  2. mybatis-plus乐观锁重试机制配置重置次数

    1.项目结构 2.定义异常类 2.1 ApiResultEnum类 package com.example.springbootmybatisplus.common;public enum ApiRe ...

  3. RabbitMQ重试机制+死信队列

    RabbitMQ的基本使用.ACK确认机制这里就不赘述了,这里主要是想实现一个应用场景: 消息消费失败后重试至多三次,仍失败则加入死信队列 一.重试机制 首先说一下RabbitMQ的消息重试机制,顾名 ...

  4. [菜鸟SpringCloud实战入门]第七章:配置中心客户端主动刷新机制 + 配置中心服务化和高可用改造...

    前言 欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud. 本系列适合有一定Java以及Sp ...

  5. Spring Cloud Zuul重试机制探秘

    简介 本文章对应spring cloud的版本为(Dalston.SR4),具体内容如下: 开启Zuul功能 通过源码了解Zuul的一次转发 怎么开启zuul的重试机制 Edgware.RC1版本的优 ...

  6. 【Spring Cloud】OpenFeign和Spring Cloud Loadbalancer调用失败后的重试机制比较

    1 概述 搭建一个微服务系统,有两个服务,Client和Server,Server有三个实例A.B.C,我让Client调用Server,Loadbalancer负载分担默认采用轮询机制,当Serve ...

  7. springcloud-ribbon重试机制详解

    一.版本信息 springboot:2.0.5.RELEASE springcloud:Finchley.RELEASE 二.配置说明 spring-retry依赖的导入: <!--重试依赖-- ...

  8. loadingcache 有重试机制吗_重试机制的实现

    服务在请求资源,如果遇到网络异常等情况,导致请求失败,这时需要有个重试机制来继续请求. 常见的做法是重试3次,并随机 sleep 几秒. 业务开发的脚手架,HTTP Client 基本会封装好 ret ...

  9. Spring Cloud Gateway重试机制

    前言 重试,我相信大家并不陌生.在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口. 生活中这样的事例很多,比如打电话,对方正在通话中啊,信号不好啊 ...

最新文章

  1. AJPFX关于Set接口学习笔记及总结
  2. VB.NET网络是否联通Function
  3. 初步认识Volatile-总线锁和缓存锁
  4. aop在项目中的实际运用_mypy在实际项目中的应用
  5. 薪酬最高十职位:工程师最吃香
  6. MFC对话框动态刷新图片(仿照全屏屏保)
  7. Wise Package Studio介绍
  8. 基于Myeclipse的三大框架(SSH)整合
  9. 今天起高考能查分了!这种方式超方便的
  10. 从 SQL Server 到 MySQL (三):愚公移山 - 开源力量
  11. 我的地盘我做主—玩转Python函数和变量
  12. 《2018华为92家核心供应商及其供应产品》
  13. 萌新的51之旅——红外通信
  14. java 地铁线路_个人项目-地铁出行路线规划(Java代码实现)
  15. CSDN如何上传照片
  16. python3 列表list 内置函数
  17. jscript php,JavaScript_JScript 运算符,JScript 运算符算术运算符- phpStudy
  18. Mysql Buffer Pool
  19. Python读写Excel文件-1
  20. 以太坊接班人哪家强?——一张图看懂区块链

热门文章

  1. js改变css样式方法
  2. NFT带给我们普通人的机遇是什么?
  3. sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix)
  4. 智能工厂需要哪些条件和技术?
  5. 事业单位计算机面试基础知识,求事业单位面试题目(计算机岗位)
  6. php 微信 语音,PHP语言微信开发:微信录音临时转永久存储
  7. 1.三轮全向移动底盘运动学解析
  8. 2345浏览器写CSDN博客错误
  9. 易语言 易语言进入下次循环 类似C语言的continue
  10. 嵌入式块设备内核驱动