spring cloud feign启动熔断后为何直接执行fallback内的方法?
问题描述
在使用feign过程中,通过配置 feign.hystrix.enabled=true
开启熔断。但启动后将直接执行fallback也不会判断调用是否成功。在未配置熔断启动的情况下调用正常,当前需要开启熔断后先尝试调用,在调用失败后才调用fallback的回退方法。
相关代码
Feign 客户端
@FeignClient(name = ServiceConstant.HNISTER_SECURITY,fallback = ResourceRestApiFallback.class,path = "api")
public interface ResourceRestApi {
@GetMapping(path = "resources")
List<ResourceDTO> findAll();
@GetMapping(path = "resources/status/{status}")
List<ResourceDTO> findByStatus(@PathVariable(name = "status") Integer status);
}
Fallback
@Component
public class ResourceRestApiFallback implements ResourceRestApi {
private Logger logger = LoggerFactory.getLogger(ResourceRestApiFallback.class);
@Override
public List<ResourceDTO> findAll() {
logger.error("#hnister# feign client ResourceRestApiFallback.findAll() fail");
return Lists.newArrayList();
}
@Override
public List<ResourceDTO> findByStatus(Integer status) {
logger.error("#hnister# feign client ResourceRestApiFallback.findByStatus() fail");
return Lists.newArrayList();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
遇到同样的问题,解决了吗?
我这边开始是因为没用Feign调用,用了restTemplate,所以在主程序里面加了@EnableHystrix,后面整合了Feign之后,也是出现你这个问题,把主程序的@EnableHystrix去掉之后就正常了,不知道你是不是这个问题。
主要原因应该是Hystrix默认超时时间过短,导致直接进入fallback。
yml中的修复配置
Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(由于Ribbon是懒加载的,在首次请求时,才会开始初始化相关类),这个响应时间可能就大于1秒了。
法一 Ribbon配置饥饿加载(最佳推荐) 自行整理yml中的格式
ribbon:
eager-load:
调用端,eureka.client.fetch-registy: true,就可以了