我使用的是 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 到 2021 版本列车后,我遇到了同样的问题,它不再支持 hystrix 和
spring-cloud-starter-netflix-hystrix
。
在spring doc我找到了这个信息:
如果 Spring Cloud CircuitBreaker 位于类路径中并且 feign.CircuitBreaker.enabled=true,Feign 将会用断路器包装所有方法。
这意味着您必须满足两个要求:
feign.circuitbreaker.enabled=true
就我而言,我已经切换到:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
这解决了问题。
最后我解决了添加依赖项的问题:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在较新版本的 Spring 中,@akoz 提到的属性更改为:
spring.cloud.openfeign.Circuitbreaker.enabled=true