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

     

  • 相关阅读:
    python(内置高阶函数)
    cms 环境搭建
    cookie、session 和 token 区别
    接口用例设计
    python(字符编码与转码)
    从北斗卫星时钟(北斗校时器)发展纵论世界卫星导航新格局
    北斗授时系统(GPS授时设备)错一秒会怎样?京准电子科技
    北斗校时服务器(GPS时钟服务器)在电力调度系统应用
    GPS卫星时钟(北斗授时设备)在监狱管理系统方案
    NTP校时(网络对时服务器)IPC网络摄像机时钟同步
  • 原文地址:https://www.cnblogs.com/shaolixin/p/11491791.html
Copyright © 2011-2022 走看看