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默认不重试