博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring cloud gateway中解决第一次请求失败的问题
阅读量:4311 次
发布时间:2019-06-06

本文共 1726 字,大约阅读时间需要 5 分钟。

在项目中使用spring cloud gateway之后中,发现第一次路由请求都会失败。

百度了一下,知道是hystix timeout的问题:

即Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。

而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。

一般有三种解决方案:

1)延长hystix的连接超时时间,默认时间是1秒

//在Fegion服务的application配置文件中添加一下配置:hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:5000

2)禁用hystix的超时时间

//在Fegion服务的application配置文件中添加一下配置:hystrix.command.default.execution.timeout.enabled: false

3)直接禁用hystix

//在Fegion服务的application配置文件添加如下配置信息:feign.hystrix.enabled: false

 

个人感觉第2/3方案都太简单粗暴了,后面也会出现其他问题,所以先试试第1个方案。

为了对hystrix timeout了解更清楚,避免碰到其他坑,再次百度,总结hystrix配置如下

最终解决方案,如果配置文件的版本基本如方案1所写(并未测试),由于我的网关使用代码编写的,最终如下

   @Bean    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {        Builder result=builder.routes();        //services列表        for (int i = 0; i < services.length; i++) {            String service = services[i];            result=result.route(p -> p                    .path("/"+service+"/**")                    .filters(f -> f                        .hystrix(config -> config   // 对path()指定的请求使用熔断器                                 .setName("hystrix-"+service)   // 熔断器的名字                                 .setFallbackUri("forward:/fallback")// 熔断                                 .setSetter(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(service))                                         .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()                                         .withExecutionTimeoutInMilliseconds(5000))//超时                                 )))                     .uri("lb://"+service)); // 将请求路由到指定目标, lb开头是注册中心中的服务        }        return result.build();    }

 

转载于:https://www.cnblogs.com/um-alex/p/10943802.html

你可能感兴趣的文章
UOJ #349. 【WC2018】即时战略
查看>>
15天玩转redis —— 第十篇 对快照模式的深入分析
查看>>
理解MapReduce计算构架
查看>>
【BZOJ 3473】 字符串 (后缀数组+RMQ+二分 | 广义SAM)
查看>>
jQuery渐隐渐出的文字提示
查看>>
异常记录处理
查看>>
如何定位到append的当前位置,不用拉滚动条scrollIntoView方法
查看>>
我的第一篇Window Live Writer日志
查看>>
MySQL编码、Spring配置中编码、Struts中文问题
查看>>
Controller中使用过滤器
查看>>
Anaconda+django写出第一个web app(八)
查看>>
模拟 HDOJ 5099 Comparison of Android versions
查看>>
关于http的post传送文件
查看>>
eclipse 快速导入所有需要的包
查看>>
枚举类
查看>>
关于ES6新特性
查看>>
Linux——变色的文件文件夹含义
查看>>
Android异常分析(转)
查看>>
php常用正则表达式
查看>>
ie7浏览器兼容问题
查看>>