問題梳理
【現象】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-><br> HystrixObservableTimeoutOperator-><br> final Reference<TimerListener> tl = HystrixTimer.getInstance().addTimerListener(listener);<br>html
- 看到有時間監聽類
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.找到關鍵點ide
listener.getIntervalTimeInMilliseconds()
3.接着看lister的實現ui
@Override public int getIntervalTimeInMilliseconds() { return properties.timerDelayInMilliseconds().get(); }
4.找到properties關鍵類this
HystrixCollapserProperties
5.終於找到了關鍵屬性url
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的屬性控制的Orzspa
方向錯了,趕忙換個方向<br> https://www.cnblogs.com/520playboy/p/8074347.html.net
總結
一直想找Gateway的屬性,試了半天,網上各類找都沒找到,最後仍是經過看源碼,發現方向錯誤了,調整方向,bingo.code