前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zuul超时问题,微服务响应超时,zuul进行熔断

Zuul超时问题,微服务响应超时,zuul进行熔断

作者头像
天涯泪小武
发布2019-01-17 11:52:30
3K0
发布2019-01-17 11:52:30
举报
文章被收录于专栏:SpringCloud专栏

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

代码语言:javascript
复制
@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同样进入熔断。 可以自行修改超时时间来测试一下。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年12月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档