zoukankan      html  css  js  c++  java
  • Spring Cloud第一次请求报错问题

    一、原因 

    我们在使用Spring Cloud的Ribbon或Feign来实现服务调用的时候,第一次请求经常会经常发生超时报错,而之后的调用就没有问题了。造成第一次服务调用出现失败的原因主要是Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,而是在调用的时候才会去创建相应的Client,所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间,这样一来如果创建时间速度较慢,同时设置的超时时间又比较短的话,很容易就会出现上面所描述的显现。

    二、Ribbon timeout默认值

    RibbonClientConfiguration 类中,Ribbon的默认timeout时间默认设置为1秒

    public class RibbonClientConfiguration {
        public static final int DEFAULT_CONNECT_TIMEOUT = 1000;
        public static final int DEFAULT_READ_TIMEOUT = 1000;
        public static final boolean DEFAULT_GZIP_PAYLOAD = true;
        @RibbonClientName
        private String name = "client";
        @Autowired
        private PropertiesFactory propertiesFactory;
    
        public RibbonClientConfiguration() {
        }
    }

    DEFAULT_READ_TIMEOUT默认设置为1秒,如果第一次请求响应时间超过了1秒,就会产生超时错误,我们可以在application.yml文件中做如下设置:

    #建议3-5秒
    ribbon:
    ReadTimeout: 5000
    ConnectTimeout: 5000
    #Ribbon的饥饿加载(eager-load)模式
    eager-load:
    #开启Ribbon的饥饿加载模式
    enabled: true
    #指定需要饥饿加载的客户端名称、服务名
    clients: spring-application-name服务名称

    Eclipse或者Intellij IDEA里,这两个timeout时间属性是不会有提示的,这个很正常。不是所有的属性,IDE都能正常提示的,不过没关系,不影响使用的。只要你配置了,Ribbon就好按照你配置的来。

    三、feign请求超时问题 (断点调试经常遇到 )

    解决办法如下: 

     开启hystrix,配置hystrix的超时时间

    #feign客户端启动hystrix断路保护
    feign: hystrix: enabled:
    true hystrix: command: default: execution: isolation: thread: #断路器超时时间 默认1秒,首次访问时间比较长,容易造成访问超时的问题,这边设置成5秒以解决该问题 timeoutInMilliseconds: 60000

     

  • 相关阅读:
    index of rmvb mp3 rm突破站点入口下载
    人类智商一般在多少左右?爱因斯坦的智商是多少?
    UVALive 5102 Fermat Point in Quadrangle 极角排序+找距离二维坐标4个点近期的点
    ProgressDialog使用总结
    Js中的多条件排序,多列排序
    腾讯2014年实习生招聘笔试面试经历
    周根项《一分钟速算》全集播放&下载地址
    中国大推力矢量发动机WS15 跨入 世界先进水平!
    探索Android中的Parcel机制(上)
    ORACLE uuid自己主动生成主键
  • 原文地址:https://www.cnblogs.com/shaolixin/p/11491791.html
Copyright © 2011-2022 走看看