2020import com .netflix .client .ClientRequest ;
2121import com .netflix .client .IResponse ;
2222import com .netflix .client .RequestSpecificRetryHandler ;
23+ import com .netflix .client .RetryHandler ;
2324import com .netflix .client .config .CommonClientConfigKey ;
2425import com .netflix .client .config .IClientConfig ;
2526import com .netflix .loadbalancer .ILoadBalancer ;
27+ import feign .Client ;
28+ import feign .Request ;
29+ import feign .RequestTemplate ;
30+ import feign .Response ;
2631
2732import java .io .IOException ;
2833import java .net .URI ;
2934import java .util .Collection ;
3035import java .util .Map ;
3136
32- import feign .Client ;
33- import feign .Request ;
34- import feign .RequestTemplate ;
35- import feign .Response ;
36- import feign .RetryableException ;
37-
3837class LBClient extends AbstractLoadBalancerAwareClient <LBClient .RibbonRequest , LBClient .RibbonResponse > {
3938
4039 private final Client delegate ;
4140 private final int connectTimeout ;
4241 private final int readTimeout ;
42+ private final IClientConfig clientConfig ;
4343
4444 LBClient (Client delegate , ILoadBalancer lb , IClientConfig clientConfig ) {
4545 super (lb , clientConfig );
46+ this .setRetryHandler (RetryHandler .DEFAULT );
47+ this .clientConfig = clientConfig ;
4648 this .delegate = delegate ;
4749 connectTimeout = clientConfig .get (CommonClientConfigKey .ConnectTimeout );
4850 readTimeout = clientConfig .get (CommonClientConfigKey .ReadTimeout );
@@ -63,19 +65,15 @@ public RibbonResponse execute(RibbonRequest request, IClientConfig configOverrid
6365
6466 @ Override
6567 public RequestSpecificRetryHandler getRequestSpecificRetryHandler (
66- RibbonRequest request , IClientConfig requestConfig ) {
67-
68- return new RequestSpecificRetryHandler (true , false ) {
69- @ Override
70- public boolean isRetriableException (Throwable e , boolean sameServer ) {
71- return e instanceof RetryableException ;
72- }
73-
74- @ Override
75- public boolean isCircuitTrippingException (Throwable e ) {
76- return e instanceof IOException ;
77- }
78- };
68+ RibbonRequest request , IClientConfig requestConfig ) {
69+ if (clientConfig .get (CommonClientConfigKey .OkToRetryOnAllOperations , false )) {
70+ return new RequestSpecificRetryHandler (true , true , this .getRetryHandler (), requestConfig );
71+ }
72+ if (!request .toRequest ().method ().equals ("GET" )) {
73+ return new RequestSpecificRetryHandler (true , false , this .getRetryHandler (), requestConfig );
74+ } else {
75+ return new RequestSpecificRetryHandler (true , true , this .getRetryHandler (), requestConfig );
76+ }
7977 }
8078
8179 static class RibbonRequest extends ClientRequest implements Cloneable {
0 commit comments