Spring Cloud openfeign 3.0.1 回退未被触发

问题描述 投票:0回答:3

我使用的是 spring-cloud-starter-openfeign 3.0.1 版本,并且在后备实现方面遇到问题。如果发生任何异常,似乎不会被触发。

我配置了一个假客户端,使用无效的主机作为 url,以引发异常:

@FeignClient(name = "feignClientTest", url = "invalid.url", fallback = FeignClientTest.FallbackTest.class)
public interface FeignClientTest {

    @RequestMapping(method = RequestMethod.GET, value = "/fake/url")
    String getFromFakeUrl();

    @Component
    class FallbackTest implements FeignClientTest {

        private final Logger log = LoggerFactory.getLogger(this.getClass());

        @Override
        public String getFromFakeUrl() {
            log.debug("Fallback occurred for getFromFakeUrl");
            return "Fallback";
        }
    }
}


调用 getFromFakeUrl() 方法后,我得到一个 java.net.UnknownHostException,而不是后备实现中使用的“Fallback”字符串。

我在应用程序配置文件中设置了 feign.Circuitbreaker.enabled=true 。

我还应该配置什么吗?我是不是错过了什么?

提前致谢。

spring-cloud
3个回答
10
投票

将项目升级到 Spring Cloud 到 2021 版本列车后,我遇到了同样的问题,它不再支持 hystrix 和

spring-cloud-starter-netflix-hystrix

spring doc我找到了这个信息:

如果 Spring Cloud CircuitBreaker 位于类路径中并且 feign.CircuitBreaker.enabled=true,Feign 将会用断路器包装所有方法。

这意味着您必须满足两个要求:

  1. 启用属性:
    feign.circuitbreaker.enabled=true
  2. 添加对 Spring Cloud CircuitBreaker 的依赖,它将处理配置的后备。

就我而言,我已经切换到:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>

这解决了问题。


0
投票

最后我解决了添加依赖项的问题:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

0
投票

在较新版本的 Spring 中,@akoz 提到的属性更改为:

spring.cloud.openfeign.Circuitbreaker.enabled=true

© www.soinside.com 2019 - 2024. All rights reserved.