Ribbon的超时

  • 全局设置:
ribbon:
ReadTimeout: 60000
ConnectTimeout: 60000
  • 1
  • 2
  • 3
  • 局部设置:
service-id:
ribbon:
ReadTimeout:1000
ConnectTimeout:1000
  • 1
  • 2
  • 3
  • 4

其中, service-id 是Ribbon所使用的虚拟主机名,一般和Eureka Server上注册的服务名称一致,即:与 spring.application.name 一致。

Feign的超时

从Spring Cloud Edgware开始,Feign支持使用属性配置超时:

feign:
client:config:
feignName:
connectTimeout:5000
readTimeout:5000
  • 1
  • 2
  • 3
  • 4
  • 5

对于老版本,可以写个 feign.Request.Options ,参考: org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration#feignRequestOptions 的写法即可。

RestTemplate的超时

一些时侯,我们可能使用了RestTemplate,例如

@Bean
@LoadBalanced
public RestTemplate restTemplate ()
{
return new RestTemplate ();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

此时,超时可使用如下方式设置:

@Bean
@LoadBalanced
public RestTemplate restTemplate ()
{
SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory ();
simpleClientHttpRequestFactory.setConnectTimeout(1000);
simpleClientHttpRequestFactory.setReadTimeout(1000);
return new RestTemplate(simpleClientHttpRequestFactory);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Zuul的超时

Zuul的超时比较复杂,因为Zuul整合了Ribbon、Hystrix。下面分两种情况讨论:

  • 如果Zuul的路由使用了Ribbon 
    那么:Zuul的超时则与Ribbon、Hystrix相关,此时Zuul的超时可以配置类似如下:
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds:1000
ribbon:
ReadTimeout:1000
ConnectTimeout:1000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

代码解析:此种情况下,Zuul转发所使用的过滤器是 org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter ,在这个过滤器中,整合了Hystrix以及Ribbon。

  • 如果Zuul的路由未使用Ribbon 
    例如:Zuul的路由配置如下:
zuul:
routes:
user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
url:http://localhost:8000/ # 指定的url
path: /user/** # url对应的路径。
  • 1
  • 2
  • 3
  • 4
  • 5

那么,此时Zuul的超时只与如下两个配置有关:

zuul:
host:
socket-timeout-millis:10000
connect-timeout-millis:2000
  • 1
  • 2
  • 3
  • 4
  • 5

代码解析:直接配置URL路由的方式,用不上Ribbon,也用不上Hystrix,Zuul转发所使用的过滤器是 org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter ,在这个过滤器中,Zuul使用Apache HttpClient进行转发。 
在现实场景中,有时候可能两种路由方式配合使用,因此,建议大家配置以上所有属性。

Hystrix的超时

hystrix:
command:
default:
execution:
timeout:
enabled:true
isolation:
thread:
timeoutInMilliseconds:1000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如上,Hystrix的默认超时时间是1秒。默认开启超时机制。如需关闭Hystrix的超时,可将xxx.enabled设置为false。

Tips

如有组件跟Hystrix配合使用,一般来讲,建议Hystrix的超时 > 其他组件的超时,否则将可能导致重试特性失效。

注:转载自周立SpringCloud

Spring Cloud各组件超时总结的更多相关文章

  1. Spring Cloud 各组件调优参数

    Spring Cloud整合了各种组件,每个组件往往还有各种参数.本文来详细探讨Spring Cloud各组件的调优参数. Tomcat配置参数 1 server: 2 tomcat: 3 max-c ...

  2. Spring Cloud各个组件的配套使用

    我们从整体上来看一下Spring Cloud各个组件如何来配套使用:  从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构. 其中Eureka负责服务的注册与发现, ...

  3. Spring Cloud 各个组件介绍

    从上图可以看出 Spring Cloud 各个组件相互配合,合作支持了一套完整的微服务架构: Eureka 负责服务的注册与发现,很好地将各服务连接起来. Hystrix 负责监控服务之间的调用情况, ...

  4. Spring Cloud常用组件及各组件版本对应关系图

    Spring Cloud常用组件: 架构图: 版本对应关系:

  5. Spring Cloud feign 服务超时处理

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fa ...

  6. Spring Cloud Feign组件

    采用Spring Cloud微服务框架后,经常会涉及到服务间调用,服务间调用采用了Feign组件. 由于之前有使用dubbo经验.dubbo的负载均衡策略(轮训.最小连接数.随机轮训.加权轮训),du ...

  7. Spring Cloud各组件

    讲的不错:http://www.ityouknow.com/springcloud/2017/05/16/springcloud-hystrix.html Spring Cloud技术应用从场景上可以 ...

  8. Spring Cloud Config Client 超时与重试

    简介 有时客户端需要在 config server 无响应时进行重试,以给 config server 时间进行恢复.利用 spring 提供的重试组件,我们可以方便的配置重试机制,包括重试间隔,重试 ...

  9. Spring Cloud 各个组件角色简介

    概述 SpringCloud 是一个全家桶式的技术栈,包含了很多组件:包含 Eureka.Ribbon.Feign.Zuul .Hystrix等.每个组件完成对应的功能 组件介绍 - 服务发现 Eur ...

随机推荐

  1. ftp下载文件失败get: Access failed: 550 Failed to open file. (t1.log)

    get: Access failed: 550 Failed to open file. (t1.log) 原因是被SELinux安全访问控制策略限制了. 科普: SELinux(Security-E ...

  2. Spring源码阅读(六)

    这一讲分析spring bean属性注入代码populateBean,源码分析如下 /** * Populate the bean instance in the given BeanWrapper ...

  3. Vector集合——单列集合的“祖宗”类

    是实现可增长的对象数组:所以底层也是数组: 与collection集合不同的是,vector是同步的,意味着是单线程的,意味着效率低,速度慢, 所以在jdk1.2版本之后被ArrayList集合所取代 ...

  4. 阿里巴巴json fastjson String转javaBean

    private Entity getEntity(String resp){        JSONObject jsonObj = (JSONObject) JSON.parse(resp);    ...

  5. The Little Prince-12/05

    The Little Prince-12/05 "When a mystery is too overpowering, one dare not disobey. Absurd as it ...

  6. Spring5源码解析-Spring框架中的单例和原型bean

    Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...

  7. 新建web项目myeclipse基本设置

    1. General --> Workspace --> UTF-82. General --> Editors --> Associations --> JSP --& ...

  8. HTML(续)

    1.有frame就无body,框架的noresize:设置框架大小不能改变.2.链接在框架中的应用target:有定为目标的功能.<a href = "链接源地址" targ ...

  9. django图书管理系统实例

    首页,其他页面全部继承首页的上半部分 点击发布图书页面 首页点击书名,跳转到图书信息界面,该界面可删除图书 项目结构 #views.py from django.shortcuts import re ...

  10. centos6安装多实例mysql

    centos 6.5,使用二进制安装多实例mysql 5.5.60 所需安装包mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz.ncurses-devel-5.7- ...