Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feign Retryer is not configurable and overlaps with the ribbon retry. #467

Closed
LutzStrobel opened this issue Jul 29, 2015 · 7 comments
Closed

Comments

@LutzStrobel
Copy link

I have a consumer service calling an provider service which is running with 2 instances.
The provider interface

  @FeignClient("example")
  public interface ExampleService {
     @RequestMapping(
        method = {RequestMethod.POST},
        value = {"/greeting/{nameToGreat}"}
      )
     String greeting(@PathVariable(value = "nameToGreat") String nameToGreat);

The ribbon configuration within the consumer service is as follows:

example.ribbon.OkToRetryOnAllOperations=false
example.ribbon.ReadTimeout=3999
example.ribbon.MaxAutoRetries=0
example.ribbon.MaxAutoRetriesNextServer=3

If there is a SocketTimeoutException during a call to the example service, I would not expect that there a retry to the next instance occurs, because POST requests are not idempotent.
But the real behavior is that there retries to the next instance occurs which causes creation of duplicate accounts aso.

In a debugging session I could see that a correct RequestSpecificRetryHandler with the ribbon config values from above will be created and as far I could see the method isRetriableException(...) of that handler returns false.

What can I do to find a solution?
Thanx
Lutz

@LutzStrobel
Copy link
Author

Now I found that the FeignClient uses the default retryer which retries the failed requests on its own.
I think this is not desired, because it overrules the configuration for the ribbon loadbalancer.
Maybe this is not a feature, is it?
Lutz

@spencergibb spencergibb changed the title LoadBalancerCommand retries post requests even if configured: OkToRetryOnAllOperations=false Feign Retryer is not configurable and overlaps with the ribbon retry. Mar 3, 2016
@spencergibb
Copy link
Member

Perhaps the default should be an empty Retryer.

As a workaround, you can create a Retryer bean in a Feign Client Configuration.

@padilo
Copy link

padilo commented Apr 25, 2016

Workaround works like a charm:

  @Bean
  public Retryer retryer() {
    return new Retryer() {

      @Override
      public void continueOrPropagate(RetryableException e) {
        throw e;
      }

      @Override
      public Retryer clone() {
        return this;
      }
    };
  }

@srowatt
Copy link

srowatt commented Apr 6, 2017

There's a NEVER_RETRY implementation so you can do

@Bean public Retryer retryer() { return Retryer.NEVER_RETRY; }

@ryanjbaxter
Copy link
Contributor

We can close this issue because all this retry logic was simplified in the latest Camden SRs and and Dalston snapshots and there is only one level of retry now.

@theknickerbocker
Copy link

Can you explain what you mean by 'there is only one level of retry now'?

@spencergibb
Copy link
Member

We've eliminated the feign retry with our ribbon retry

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants