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

     

  • 相关阅读:
    (二)Spring Security 入门体验之——用户密码配置
    (一)Spring Security 入门体验
    (十二)权限之RBAC
    (十一)jwt详解
    (十)登录拦截器之前后端
    (九)优化登录页面
    (八)前后端整合之跨域问题
    SecureCRT 8.1.4 破解教程
    centOS配置网络(6.8)securCRT连接虚拟机
    二叉树的下一个节点(给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点)
  • 原文地址:https://www.cnblogs.com/shaolixin/p/11491791.html
Copyright © 2011-2022 走看看