Gateway 访问超时 返回504

问题梳理

【现象】Gateway访问超时
{
    "timestamp": "2019-06-29 11:45:13",
    "path": "/admin/user/info",
    "status": 504,
    "error": "Gateway Timeout",
    "message": "Response took longer than configured timeout"
}
【方法】 根据出错位置查看源代码,

AbstractCommand->

HystrixObservableTimeoutOperator->

final Reference tl = HystrixTimer.getInstance().addTimerListener(listener);

  1. 看到有时间监听类
public Reference<TimerListener> addTimerListener(final TimerListener listener) {
        startThreadIfNeeded();
        // add the listener

        Runnable r = new Runnable() {

            @Override
            public void run() {
                try {
                    listener.tick();
                } catch (Exception e) {
                    logger.error("Failed while ticking TimerListener", e);
                }
            }
        };

        ScheduledFuture<?> f = executor.get().getThreadPool().scheduleAtFixedRate(r, listener.getIntervalTimeInMilliseconds(), listener.getIntervalTimeInMilliseconds(), TimeUnit.MILLISECONDS);
        return new TimerReference(listener, f);
    }

2.找到关键点

    listener.getIntervalTimeInMilliseconds()

3.接着看lister的实现

        @Override
        public int getIntervalTimeInMilliseconds() {
            return properties.timerDelayInMilliseconds().get();
        }

4.找到properties关键类

HystrixCollapserProperties

5.终于找到了关键属性

timerDelayInMilliseconds

 protected HystrixCollapserProperties(HystrixCollapserKey key, Setter builder, String propertyPrefix) {
        this.maxRequestsInBatch = getProperty(propertyPrefix, key, "maxRequestsInBatch", builder.getMaxRequestsInBatch(), default_maxRequestsInBatch);
        this.timerDelayInMilliseconds = getProperty(propertyPrefix, key, "timerDelayInMilliseconds", builder.getTimerDelayInMilliseconds(), default_timerDelayInMilliseconds);
        this.requestCacheEnabled = getProperty(propertyPrefix, key, "requestCache.enabled", builder.getRequestCacheEnabled(), default_requestCacheEnabled);
        this.metricsRollingStatisticalWindowInMilliseconds = getProperty(propertyPrefix, key, "metrics.rollingStats.timeInMilliseconds", builder.getMetricsRollingStatisticalWindowInMilliseconds(), default_metricsRollingStatisticalWindow);
        this.metricsRollingStatisticalWindowBuckets = getProperty(propertyPrefix, key, "metrics.rollingStats.numBuckets", builder.getMetricsRollingStatisticalWindowBuckets(), default_metricsRollingStatisticalWindowBuckets);
        this.metricsRollingPercentileEnabled = getProperty(propertyPrefix, key, "metrics.rollingPercentile.enabled", builder.getMetricsRollingPercentileEnabled(), default_metricsRollingPercentileEnabled);
        this.metricsRollingPercentileWindowInMilliseconds = getProperty(propertyPrefix, key, "metrics.rollingPercentile.timeInMilliseconds", builder.getMetricsRollingPercentileWindowInMilliseconds(), default_metricsRollingPercentileWindow);
        this.metricsRollingPercentileWindowBuckets = getProperty(propertyPrefix, key, "metrics.rollingPercentile.numBuckets", builder.getMetricsRollingPercentileWindowBuckets(), default_metricsRollingPercentileWindowBuckets);
        this.metricsRollingPercentileBucketSize = getProperty(propertyPrefix, key, "metrics.rollingPercentile.bucketSize", builder.getMetricsRollingPercentileBucketSize(), default_metricsRollingPercentileBucketSize);
    }

Gateway的超时是通过Hystrix的属性控制的Orz

方向错了,赶紧换个方向

https://www.cnblogs.com/520playboy/p/8074347.html

总结

一直想找Gateway的属性,试了半天,网上各种找都没找到,最后还是通过看源码,发现方向错误了,调整方向,bingo.

原文地址:https://www.cnblogs.com/mengjianzhou/p/11106221.html

时间: 2024-10-03 04:11:09

Gateway 访问超时 返回504的相关文章

jQuery easyui Session 超时返回登录页面

说明:测试设置失效时间为1分钟,登录成功后1分钟去点击操作处罚事件,执行①连接到com.lactec.framework.ac.filter.AuthFilter这个类判断执行的action操作. 判断session是否为空,超时就返回,我用的是ajax请求:如果是ajax请求响应头会有,x-requested-with: 设置: rep.setHeader("sessionstatus", "timeout");//在响应头设置session状态        

http访问过程和web访问时返回状态码介绍

一次完整的http请求处理过程: (1) 建立或处理连接:接收请求或拒绝请求: (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程: (3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息: (4) 访问资源:获取请求报文中请求的资源: (5) 构建响应报文: (6) 发送响应报文: (7) 记录日志: status(状态码): 1xx:100-101, 信息提示: 2xx:200-206, 成功 3xx:300-305, 重定向 4xx:40

源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题

最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看, 支持openssl, 支持curl, 网上找了好多资料, 都没解决. [[email protected] ~]# php -V Failed loading /usr/local/zend/ZendOptimizer.so: /usr/local/zend/ZendOptimizer.so: undefi

源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)

最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看, 支持openssl, 支持curl, 网上找了好多资料, 都没解决. [plain] view plain copy [[email protected] ~]# php -V Failed loading /usr/local/zend/ZendOptimizer.so:  /usr/local/zend

一次由于 MTU 设置不当导致的网络访问超时

转自:http://weibo.com/ttarticle/p/show?id=2309404140904511340923 API 服务正常,但是调用总是超时.api端日志显示,响应速度很快. ??? 现象 Server A 调用本机的接口,能正常返回.调用Server B的接口,总是超时.被调用接口是能正常执行的,而且有执行日志记录.Server C 调用Server B的接口也能正常返回 分析 根据以上,基本可以排除是Server B接口服务的问题导致超时.很有可能 Server A 与

asp.net mvc cookie超时返回登录页面问题

filterContext.HttpContext.Response.Write("<script>top.location.href = '/Login/Index';</script>"); 在使用超时设置时在本机调试时可以返回登录页面,在本机部署也可以,但是在服务器部署后没有跳转到登录页面,报错,以前的代码如下: public class HandlerLoginAttribute : AuthorizeAttribute    {        publ

Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)

一.我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息: Xml代码   <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!--   Spring MVC Servlet --> <servlet> <s

并发访问超时的问题可能性(引用)

用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (HttpWebResponse)req.GetResponse(); 之前的多次调试,一直都是可以正常获得对应的response,然后读取html页面的. 但是后来几次的调试,在没有改变代码的前提下,结果GetResponse却始终会超时死掉. [解决过程] 1.默认request的timeout是1000000毫秒

问题总结:php-curl在nginx中访问超时,在CLI环境正常

为了测试本地php代码,由于电脑内存限制,无法运行虚拟机,于是搭建了本地web服务调试环境Windows.Nginx.php-cgi.mysql 由于xdebug调试服务9000端口已占用,所以php-cgi使用了9001端口,在nginx配置中需要做响应更改 1 fastcgi_pass 127.0.0.1:9001; 启动服务: nginx> start /b nginx.exe nginx> net start mysql56 nginx> cd path_to_php php&g