今天测了一下Ribbon的重试跟超时机制,发现进行的全局超时配置一直不生效,配置如下:

ribbon:
#单位ms,请求连接的超时时间,默认1000
ConnectTimeout: 500
#单位ms,读取数据的超时时间,默认1000
ReadTimeout: 3000
#对所有操作请求都进行重试
#设置为true时,会对所有的请求进行重试,若为false只会对get请求进行重试
#如果是put或post等写操作,
#如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。
#默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试
#非GET方式请求,只有连接异常时,才会进行重试
OkToRetryOnAllOperations: true
#切换实例的重试次数,默认为1
MaxAutoRetriesNextServer: 1
#如果不配置ribbon的重试次数
#对当前实例的重试次数,默认为0
MaxAutoRetries: 2
#为true的时候会关闭懒加载
#Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,
#而是在调用的时候才会去创建相应的Client,所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间
#这样一来如果创建时间速度较慢,同时设置的超时时间又比较短的话,第一次请求很容易超时
eager-load:
enabled: true
#指定需要关闭懒加载的服务名
clients: eureka-client

测了一天后,解决方案如下:

  1. 解决全局配置不生效的问题
@Bean
@LoadBalanced
public RestTemplate ribbonRestTemplate() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(2000);
factory.setConnectTimeout(2000);
return new RestTemplate(factory);
}

因为Ribbon层走的一定是RestTemplate,所以我们可以直接配置这个RestTemplate的配置

  1. 解决重试不生效的问题:

pom中需要新增依赖:

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

启动类新增注解:@EnableRetry

关于重试为什么不生效我一直没找到原因,希望有懂的大佬能不吝赐教!!!!

我的版本:

Spring Boot版本:2.1.4.RELEASE

Spring Cloud版本:Greenwich.SR1

Spring Cloud学习 之 Spring Cloud Ribbon 重试机制及超时设置不生效的更多相关文章

  1. Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)

    Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...

  2. Spring Cloud 学习 之 Spring Cloud Eureka(搭建)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 文章目录 搭建服务注册中心: 注册服务提供者: 高可用注册中心: 搭建服务注册中心: ...

  3. SpringCloud | FeignClient和Ribbon重试机制区别与联系

    在spring cloud体系项目中,引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试. 今天就来分别分析一下 FeignClient 和 Ribbon 重试机制 ...

  4. Spring Cloud学习 之 Spring Cloud Ribbon(负载均衡策略)

    文章目录 AbstractLoadBalancerRule: RandomRule: RoundRobinRule: RetryRule: WeightedResponseTimeRule: 定时任务 ...

  5. Spring Cloud学习笔记--Spring Boot初次搭建

    1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...

  6. spring cloud学习(六)Spring Cloud Config

    Spring Cloud Config 参考个人项目 参考个人项目 : (希望大家能给个star~) https://github.com/FunriLy/springcloud-study/tree ...

  7. Spring Cloud 学习 (九) Spring Security, OAuth2

    Spring Security Spring Security 是 Spring Resource 社区的一个安全组件.在安全方面,有两个主要的领域,一是"认证",即你是谁:二是& ...

  8. Spring框架学习03——Spring Bean 的详解

    1.Bean 的配置 Spring可以看做一个大型工厂,用于生产和管理Spring容器中的Bean,Spring框架支持XML和Properties两种格式的配置文件,在实际开发中常用XML格式的配置 ...

  9. Spring框架学习02——Spring IOC 详解

    1.Spring IOC的基本概念 IOC(Inverse of Control)反转控制的概念,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理.当某个Java对象(调用者)需要调用 ...

随机推荐

  1. IDEA默认KeyMap映射快捷键

    编辑 快捷键 描述 Ctrl + 空格 基础代码补全(任意类.方法.变量的名字) Ctrl + Shift + 空格 智能代码补全(过滤期望类型的方法和变量列表) Ctrl + Shift + 回车 ...

  2. windows VMware 安装mac 系统

    0x00 下载链接 首先肯定要有镜像: 链接:https://pan.baidu.com/s/190NBRBwNXVOYRxb6nodHeA 提取码:ahq5 然后还得有这个插件: 链接:https: ...

  3. 【Tool】在Windows系统上,下载和安装当前最新版本的IDEA 2020-4-14

    下载 & 安装 IDEA 下载部分: 官网地址:https://www.jetbrains.com/idea/ 直接点击鲜眼的DOWNLOAD 如果仅仅是想简单接触学习下Java语言,社区版的 ...

  4. Vue + d3.js实现在地图上选点

    需求:用户在地图上单击选点,页面获取到具体坐标并返回. 首先比较重要的是Vue中的$nextTick,因为vue是异步更新的,如果是想打开Dialog或者是其他操作dom后才加载地图,使用nextTi ...

  5. Linux相关操作

    ssh配置秘钥 连接远程服务器时:需要用户持有“公钥/私钥对”,远程服务器持有公钥,本地持有私钥. 客户端向服务器发出请求.服务器收到请求之后,先在用户的主目录下找到该用户的公钥,然后对比用户发送过来 ...

  6. Matlab学习-(4)

    1. 函数 1.1 原始方法 之前我调用函数的方法是,首先写好函数文件,然后保存,然后在主函数中调用.这种方法的不足在于会导致你的工作目录的文件太多,从而导致很乱.在网上找了一些解决方法. 1.2 本 ...

  7. Springboot:logback日志管理(九)

    Springboot默认使用的日志框架就是logback 创建自定义的logback-spring.xml放在resources类目录下即可 logback-spring.xml: <?xml ...

  8. python os模块获取指定目录下的文件列表

    bath_path = r"I:\ner_results\ner_results" dir_list1 = os.listdir(bath_path) for dir1 in di ...

  9. Ubuntu初次使用的问题

    问题:正在等待packagekitd退出 解决办法:systemctl stop packagekit   或者 systemctl disable packagekit 问题:普通用户切换root权 ...

  10. js获取数组中最大值

    1.es6拓展运算符... Math.max(...arr) 2.es5 apply(与方法1原理相同) Math.max.apply(null,arr) 3.for循环 let max = arr[ ...