1、在selectServer的時候,如果沒有對應的server,那么會拋出一個ClientException,然后被捕獲,進入RxJava的next鏈,最后再拋出異常給調用方法,這時候就需要我們自己處理。
2、如果有server,第一次失敗,如果沒到到最大重試次數,ribbon的RxJava的調用鏈會自己捕捉,進入重試,但是如果最大重試次數之后還是超時(ribbon的connectTimeout是1秒),ribbon的調用鏈不會捕獲,會拋出IOException到外層,被feign的RetryableException捕捉,但是feign默認的是不重試,結果再拋出異常給調用方法。
3、如果http請求成功,4**和5**的響應碼會在executeAndDecode方法中被處理,拋出異常,默認不是RetryableException,直接拋出異常給調用方法。ps:自己可以重寫retryAfterDecoder使得拋出的是RetryableException,進入feign的重試機制。
注意:feign的重試機制和ribbon不同,而且feign默認不重試