至於以後你是用阿里的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=3000
zuul中之所以要配置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...