spring cloud feign启动熔断后为何直接执行fallback内的方法?

发布于 2022-09-07 03:57:49 字数 1251 浏览 15 评论 0

问题描述

在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你怎么敢 2022-09-14 03:57:49

遇到同样的问题,解决了吗?

猫烠⑼条掵仅有一顆心 2022-09-14 03:57:49

我这边开始是因为没用Feign调用,用了restTemplate,所以在主程序里面加了@EnableHystrix,后面整合了Feign之后,也是出现你这个问题,把主程序的@EnableHystrix去掉之后就正常了,不知道你是不是这个问题。

伴梦长久 2022-09-14 03:57:49

主要原因应该是Hystrix默认超时时间过短,导致直接进入fallback。

yml中的修复配置

Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(由于Ribbon是懒加载的,在首次请求时,才会开始初始化相关类),这个响应时间可能就大于1秒了。

法一 Ribbon配置饥饿加载(最佳推荐) 自行整理yml中的格式

ribbon:
eager-load:

enabled: true # 开启即时加载(默认延迟加载),默认情况下Ribbon是懒加载的——首次请求Ribbon相关类才会初始化,这会导致首次请求过慢的问题,你可以配置饥饿加载,让Ribbon在应用启动时就初始化。
clients: microservice-provider-xxx # 多个用,分隔  此处为hystrix整合的ribbon调用的目标服务名称
不弃不离 2022-09-14 03:57:49

调用端,eureka.client.fetch-registy: true,就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文