Home > Net >  Retry feign client properites
Retry feign client properites

Time:09-21

I need to retry feign call for certain http status code and after 3 second for maximum 4 time.

Is there any properties that i can define on my application.yml or i need to write my custom Retryer that implement Retry interface

CodePudding user response:

Feign has a build in Retryer however you can not configure the Retryer via application.yml. I guess the Spring Boot Team assumed that people would use the deprecated Hystrix project for this matter.

Instead of configuring Feign by config you could write a bit of code: https://cloud.spring.io/spring-cloud-openfeign/reference/html/index.html#creating-feign-clients-manually

In addition you have to map the corresponding status code to RetryableException using a custom ErrorDecoder.

public class CustomErrorDecoder implements ErrorDecoder {
  private final ErrorDecoder errorDecoder = new Default();

  @Override
  public Exception decode(String methodKey, Response response) {
    Exception exception = defaultErrorDecoder.decode(s, response);

    if(exception instanceof RetryableException){
      return exception;
    }

    if(response.status() == 499){
      return new RetryableException("499 blub", response.request().httpMethod(), null );
    }
    return exception;
  }
}
public class Example {
  public static void main(String[] args) {
    MyApi myApi = Feign.builder()
                 .errorDecoder(new CustomErrorDecoder())
                 .target(MyApi.class, "https://api.hostname.com");
  }
}

CodePudding user response:

You can use retryable annotation.

Ex: You can throw custom exception when http status code is equal to 404

@Service
public interface MyService {

    @Retryable(value = CustomException.class, maxAttempts = 2, backoff = @Backoff(delay = 100))
    void retry(String str) throws CustomException;
}
  • Related