Spring Cloud openfeign 3.0.1 回退未被触发

use*_*805 2 spring-cloud

我正在使用 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";
        }
    }
}


Run Code Online (Sandbox Code Playgroud)

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

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

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

提前致谢。

ako*_*koz 10

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

spring 文档中我找到了以下信息:

如果 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>
Run Code Online (Sandbox Code Playgroud)

这解决了问题。