• zuul超时问题


    转载:http://blog.csdn.net/tianyaleixiaowu/article/details/78772269

    是这样的,今天碰到了微服务响应超时问题,而且超时时间特别短,2秒就超时,zuul就走熔断了。 
    我采用zuul作为网关,根据不同的访问路径进行微服务的路由,譬如有个服务是user,我访问user服务的某个接口时,该接口执行时间很慢,2秒多,然后还没执行完,zuul就执行熔断了,进入了我配好的ZuulFallbackProvider里。所以来研究一下zuul的超时处理。 
    前提,zuul和微服务都已经注册到了eureka中,zuul采用service-id来进行路由,当访问/user时进入到user服务中。而且,已经为user服务设置好了zuul的熔断,譬如已经写好了UserFallbackProvider implements ZuulFallbackProvider。我特别设置了模拟超时的接口,就是搞几个接口sleep不同的时间。

    @GetMapping("/test1")
        public Object test1() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "dbToEs";
        }
    
        @GetMapping("/test2")
        public Object test2() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "dbToEs";
        }
    
        @GetMapping("/test3")
        public Object test3() {
            try {
                Thread.sleep(5500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "dbToEs";
        }

    关键是zuul的配置文件,通过配置不同的超时策略来完成超时处理。 
    注意看官方的文档:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_zuul_timeouts 
    这里就是讲zuul的超时的,配置很简单: 
    ribbon.ReadTimeout, ribbon.SocketTimeout这两个就是ribbon超时时间设置,当在yml写时,应该是没有提示的,给人的感觉好像是不是这么配的一样,其实不用管它,直接配上就生效了。 
    还有zuul.host.connect-timeout-millis, zuul.host.socket-timeout-millis这两个配置,这两个和上面的ribbon都是配超时的。区别在于,如果路由方式是serviceId的方式,那么ribbon的生效,如果是url的方式,则zuul.host开头的生效。(此处重要!使用serviceId路由和url路由是不一样的超时策略) 
    如果你在zuul配置了熔断fallback的话,熔断超时也要配置,不然如果你配置的ribbon超时时间大于熔断的超时,那么会先走熔断,相当于你配的ribbon超时就不生效了。 
    熔断超时是这样的: 
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000 
    default代表默认,如果你想为某个特定的service配熔断超时策略,可以用这种方式: 
    这里写图片描述 
    总结起来就是三种超时配置: 
    网关的超时层级 
    zuul

    zuul: 
    max: 
    host: 
    connections: 500 
    host: 
    socket-timeout-millis: 60000 
    connect-timeout-millis: 60000

    ribbon

    ribbon: 
    ReadTimeout: 10000 
    ConnectTimeout: 10000 
    MaxAutoRetries: 0 
    MaxAutoRetriesNextServer: 1 
    eureka: 
    enabled: true

    hystrix

    hystrix: 
    command: 
    default: 
    execution: 
    timeout: 
    enabled: true 
    isolation: 
    thread: 
    timeoutInMilliseconds: 60000 
    这里面ribbon和hystrix是同时生效的,哪个值小哪个生效,另一个就看不到效果了。 
    我的例子是这样配置的这里写图片描述 
    我启动项目,访问test1,也就是sleep3秒那个时,会进入熔断超时,访问test2,sleep1秒时能正常返回,访问test3同样进入熔断。 
    可以自行修改超时时间来测试一下。

  • 相关阅读:
    网盘搜索网站汇总
    AutoIt3病毒杀毒攻略(详)
    数据库的逻辑结构设计
    Oracle数据类型
    选择ORACLE数据库字符集
    ETL讲解(很详细!!!)
    Oracle左连接,右连接,全外连接和+号的用法
    Oracle用户创建及权限设置
    内连接、外连接、自然连接
    关系数据库关系代数
  • 原文地址:https://www.cnblogs.com/myf008/p/8488029.html
Copyright © 2020-2023  润新知