博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springcloud超时机制
阅读量:5142 次
发布时间:2019-06-13

本文共 2989 字,大约阅读时间需要 9 分钟。

springcloud中有很多超时时间配置,总结一下各处超时时间的使用及配置。

  • zuul超时

    zuul超时分两种情况,使用service discovery,需要配置ribbon.ReadTimeout 和 ribbon.SocketTimeout

hystrix:  command:    default:      execution:        isolation:          thread:            timeoutInMilliseconds: 100000 #命令执行超时时间,默认1000ms,应大于ribbon超时时间ribbon:  ReadTimeout: 60000  ConnectTimeout: 3000

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

不使用service discovery,直接使用url(不常用),使用zuul.host.connect-timeout-millis 和 zuul.host.socket-timeout-millis

zuul:  routes:    user-route:                   # 该配置方式中,user-route只是给路由一个名称,可以任意起名。      url: http://192.168.0.11:8000/ # 指定的url      path: /user/**              # url对应的路径处。zuul:  host:    socket-timeout-millis: 10000    connect-timeout-millis: 2000
  • ribbon超时

全局设置

ribbon:  ConnectTimeout: 3000  ReadTimeout: 60000

根据service-id进行设置,不同service-id设置不同的参数

service-id:xcloud-dataservice  ribbon:    ConnectTimeout: 3000    ReadTimeout: 60000
  • hystrix超时
hystrix:  command:    default:      execution:        timeout:          enabled: true        isolation:          thread:            timeoutInMilliseconds: 1000
  • feign超时

从Spring Cloud Edgware开始,Feign支持使用属性配置超时,默认connectTimeout:10000,readTimeout: 60000:

feign:  client:    config:      feignName:        connectTimeout: 10000        readTimeout: 60000

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

如下,启动类加上注解@Import(FeignConfiguration.class)即可。

@Configurationpublic class FeignConfiguration {    @Autowired    private ObjectFactory
messageConverters; @Bean public Retryer retryer(){ return new Retryer.Default(1000,10000,3); } @Bean Request.Options feignOptions() { return new Request.Options(5 * 1000, 30 * 1000); } @Bean @Primary @Scope("prototype") public Encoder multipartFormEncoder() { return new SpringFormEncoder(new SpringEncoder(messageConverters)); } @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } @Bean public ErrorDecoder errorDecoder(){ return new FeignErrorDecoder(); }}
  • RestTemplate超时
@Bean@LoadBalancedpublic RestTemplate restTemplate() {  SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();  simpleClientHttpRequestFactory.setConnectTimeout(1000);  simpleClientHttpRequestFactory.setReadTimeout(30000);  return new RestTemplate(simpleClientHttpRequestFactory);}
  • ribbon配置示例:
ribbon.eureka.enabled = trueribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRuleribbon.MaxAutoRetries=1ribbon.MaxAutoRetriesNextServer=2ribbon.ConnectTimeout=3000ribbon.ReadTimeout=100000

根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),如果不行,就换一个实例进行访问,如果还是不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),如果依然不行,返回失败信息。如果在此期间达到hystrix的超时时间,则返回fallback内容。

转载于:https://www.cnblogs.com/iiot/p/8527533.html

你可能感兴趣的文章
[转帖] BIO与NIO、AIO的区别
查看>>
[转帖]哈佛结构和冯·诺依曼结构的区别
查看>>
Notepad++ 不打开历史文件
查看>>
ntp时间服务器
查看>>
A1047. 做明智的消费者
查看>>
pyhon时间输出
查看>>
P1518 两只塔姆沃斯牛 The Tamworth Two
查看>>
html的解析
查看>>
打印单词长度的直方图--C语言的多种实现
查看>>
PLSql的使用
查看>>
用CAShapeLayer实现一个简单的饼状图(PieView)
查看>>
LA 3644 易爆物
查看>>
uboot 信息解读
查看>>
越是忙的时候,兴趣越多
查看>>
信步漫谈之Eclipse—插件安装
查看>>
字符串和字符数组的输入输出种类对比
查看>>
Python爬虫:抓取手机APP的数据
查看>>
手指滑动屏幕原理
查看>>
对于javascript里面闭包的理解
查看>>
LANMP安装总结
查看>>