配置超時時間 Hystrix 超時配置的N種玩法

2021-10-14 22:14:48 字數 3431 閱讀 1532

至於以後你是用阿里的sentinel還是netflix hystrix我就不管了,但今天的主題還是netflix hystrix,至少目前還是有很多在使用的,所以今天這篇文章還是看看吧。

如果我們使用的是@hystrixcommand註解,那麼可以在註解中直接指定超時時間,如下:

@hystrixcommand(fallbackmethod="fallback",commandproperties =)當然也可以指定commandkey,然後在配置檔案中配置超時時間,如下:

@hystrixcommand(fallbackmethod="fallback",commandkey="usergetkey")

hystrix.command.usergetkey.execution.isolation.thread.timeoutinmilliseconds = 13000

hystrix.command.default.execution.isolation.thread.timeoutinmilliseconds=3000假如我們的feign client定義如下:

@feignclient(value = "user-service", fallbackfactory = userremoteclientfallbackfactory.class)public inte***ce userremoteclient那麼配置如下:

hystrix.command.userremoteclient#getuser(long).execution.isolation.thread.timeoutinmilliseconds = 300為什麼要配置成上面的方式呢?

其實就是對commandkey進行配置,只要我們知道commandkey的生成規則就可以對介面級別進行配置,介面級別的規則是 client名稱#方法名(引數型別)

原始碼在feign.hystrix.sette***ctory.default中:

string commandkey = feign.configkey(target.type(), method);1.在zuul中針對服務級別的話,直接配置service-id,如下:

hystrix.command.service-id.execution.isolation.thread.timeoutinmilliseconds=3000zuul中之所以要配置service-id原因是commandkey就是用的service-id, 通過原始碼分析可以得到結論。

首先進入的是ribbonroutingfilter中的run方法,然後我們看核心的forward方法:

clienthttpresponse response = forward(commandcontext);在forward中有下面的**:

ribboncommand command = this.ribboncommandfactory.create(context);通過create可以定位到具體的實現,這邊就看你用的什麼http客戶端,預設有三種實現,預設定位到org.springframework.cloud.netflix.zuul.filters.route.apache.httpclientribboncommandfactory.create(ribboncommandcontext)方法。

重點在new httpclientribboncommand這行**,第乙個引數就是serviceid,我們看下httpclientribboncommand建構函式的完整引數:

所以service-id就是commandkey。

2.在feign中針對服務級別的話,需要對commandkey進行定製,可以用service-id, 也可以用feign client name,如下:

@bean@scope("prototype")@conditionalo****singbean@conditionalonproperty(name = "feign.hystrix.enabled")

public feign.builder feignhystrixbuilder()

});

}

配置的話根據不同的配置填寫不通的commandkey就可以了:

hystrix.command.feign client name.execution.isolation.thread.timeoutinmilliseconds=3000如果我們定製commandkey,也就意味著在使用feign呼叫的時候,只能支援一種超時配置,要麼預設的介面級別,要麼自定義的服務級別。那麼有沒有什麼方式能夠讓兩種同時支援呢?

zuul超時時間配置

server.port 10000 zuul的路由配置 zuul.routes.bid bid zuul.routes.bid consumer consumer 熔斷超時時間配置 hystrix.command.default.execution.isolation.thread.timeouti...

Feign Client 超時時間配置

在spring boot微服務架構中,大部分公司都是利用open feign進行服務間的呼叫,而在業務場景比較簡單的時候,使用預設配置是不會遇到多大問題的。但是如果業務比較複雜,服務要進行比較繁雜的業務計算,那後台很有可能會出現read timeout這個異常,因此定製化配置超時時間就有必要了。影響...

dubbo配置timeout超時時間

在dubbo的provider和consumer的配置檔案中,如果都配置了timeout的超時時間,dubbo預設以consumer中配置的時間為準。provider.xml的配置 4000 retries 0 inte ce com.dingding.tms.bms.service.billing...