Spring cloud LoadBalancerFaignClient+;功能区重试属性的回退无效

Spring cloud LoadBalancerFaignClient+;功能区重试属性的回退无效,spring-cloud,spring-cloud-feign,netflix-ribbon,Spring Cloud,Spring Cloud Feign,Netflix Ribbon,我有两个micro服务A和B,使用eureka enable。我使用B中的外挂调用一个工作正常的服务。我正在尝试使用以下功能区属性使重试工作正常 假装客户 @FeignClient(name = "https://test", path = test, fallback = FeignClientFallback.class) public interface FeignClient { @RequestMapping(value = "getname", metho

我有两个micro服务A和B,使用eureka enable。我使用B中的外挂调用一个工作正常的服务。我正在尝试使用以下功能区属性使重试工作正常

假装客户

@FeignClient(name = "https://test", 
          path = test, fallback = FeignClientFallback.class)
public interface FeignClient
{

  @RequestMapping(value = "getname", method = RequestMethod.GET)
  public Testdata find(@RequestParam(value = "id", required = true) String id) 

}
spring 
 cloud: 
    loadbalancer:
      retry: 
        enabled: true

ribbon.MaxAutoRetries: 3
ribbon.MaxAutoRetriesNextServer: 2
ribbon.OkToRetryOnAllOperations: true

feign:
  hystrix:
    enabled: true
hystrix:
  command: 
    default: 
      execution: 
        isolation: 
          thread: 
            timeoutInMilliseconds: 45000 
      circuitBreaker:
        enabled: true 
        sleepWindowInMilliseconds: 5000
        requestVolumeThreshold: 20
服务B

@Autowired
FeignClient feignClient;

  @RequestMapping(value = "/testdata", method = RequestMethod.GET)
  public Testdata gettestdata() throws Exception
  {
    Testdata testdata = feignClient.find("apple");
    return testdata;

  } 
功能区属性

@FeignClient(name = "https://test", 
          path = test, fallback = FeignClientFallback.class)
public interface FeignClient
{

  @RequestMapping(value = "getname", method = RequestMethod.GET)
  public Testdata find(@RequestParam(value = "id", required = true) String id) 

}
spring 
 cloud: 
    loadbalancer:
      retry: 
        enabled: true

ribbon.MaxAutoRetries: 3
ribbon.MaxAutoRetriesNextServer: 2
ribbon.OkToRetryOnAllOperations: true

feign:
  hystrix:
    enabled: true
hystrix:
  command: 
    default: 
      execution: 
        isolation: 
          thread: 
            timeoutInMilliseconds: 45000 
      circuitBreaker:
        enabled: true 
        sleepWindowInMilliseconds: 5000
        requestVolumeThreshold: 20
spring云依赖关系是

spring-cloud-dependencies-Dalston.SR1
spring retry ,spring-cloud-starter-feign,spring-cloud-starter-ribbon
当服务A关闭,我试图从B调用服务,但重试不起作用,其直接调用回退时,是否缺少任何配置使其起作用

没有退路我遇到如下错误

com.netflix.client.ClientException: Load balancer does not have available server for client: test
    at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483) ~[ribbon-loadbalancer-2.2.2.jar:2.2.2]
    at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.2.2.jar:2.2.2]
    at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.2.2.jar:2.2.2]
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.Subscriber.setProducer(Subscriber.java:209) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.Observable.subscribe(Observable.java:10307) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.Observable.subscribe(Observable.java:10274) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:445) ~[rxjava-1.1.10.jar:1.1.10]
    at rx.observables.BlockingObservable.single(BlockingObservable.java:342) ~[rxjava-1.1.10.jar:1.1.10]
    at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:117) ~[ribbon-loadbalancer-2.2.2.jar:2.2.2]
    at org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:63) ~[spring-cloud-netflix-core-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:97) ~[feign-core-9.5.0.jar:?]
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) ~[feign-core-9.5.0.jar:?]
    at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108) ~[feign-hystrix-9.5.0.jar:?]
我假设当它使用loadbalancerfeignclient执行时

return lbClient(clientName).executeWithLoadBalancer(ribbonRequest,
                requestConfig).toResponse();
    }
    catch (ClientException e) {
        IOException io = findIOException(e);
        if (io != null) {
            throw io;
        }
        throw new RuntimeException(e);
但我总是得到客户端异常,它没有得到重试,所以创建了一个bean作为主要的重试,但它仍然不工作

@Bean
    @Primary
    RetryHandler retryhandler() {
        // TODO Auto-generated method stub
           return new RequestSpecificRetryHandler(true, true);
    }

非常感谢您的帮助,并试图理解您的帮助不起作用……

这里也一样。你能解决这个问题吗?