SpringCloud Fegin CircuitBreaker (原hystrix) 熔断失效原因

关于Hystrix设置了feign.hystrix.enabled=true兜底方法不生效或者不走feign的问题 开启hystrix:feign.hystrix.enabled=true时, RequestContextHolder.getRequestAttributes()为空 阅读详情

前言

今天想着给自己的微服务项目添加一个熔断的功能,正好项目内远程调用是用的feign,那就直接用hystrix好了,也比较方便。

然后呢,我以为比较简单的东西,却一直不生效,资料查了个遍,硬是弄了我一上午+一下午的时间,所以记录一下,给大家避坑。

当前环境

如果你的环境跟我差的有点多,那这篇文章可能对你的帮助不大。

  • JDK8
  • SpringBoot2.6.6
  • openfeign3.1.2 (是我写这篇文章时比较新的版本了)

     

不生效的原因

原因主要有二

  1. 配置文件

    网上很多教程都是给的旧版本的配置文件,都是feign.hystrix.enabled: true,但在新版本这是不生效的 ,正确的配置应该是下面我这样:

    feign:
      circuitbreaker:
        enabled: true
    
    

    可以参考官网文档:docs.spring.io/spring-clou…

  1. 引入依赖

    网上很多教程说fegin集成了hystrix,可能旧版本确实集成了,但是新版本必须要手动添加依赖。不过这一点我没在官网上找到,鬼知道官网为什么不写,害我找了半天 ,可能是我眼神不好。

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

    引用一位博主的话,我想说的也跟他差不多:

    网上说的fegin集成hystrix误导人,害我以为添加的openfegin已经内置了hystrix,但实际是我找遍openfegin都没有看到hystrix依赖。所以需要自己添加hystrix依赖。

  2. 如果上面两个都不是的话,那你可能需要检查一下下面几个基本问题:

    • 是否添加了 openfegin 的依赖

    • 是否在启动类正确添加了@EnableFeignClients注解

    • 或者你是否正确使用了@FeignClient的fallback参数

    • 熔断处理的实现类是否有被Spring管控

    以上差不多就是我想到的全部条件了。

附使用代码

ResourceClient.java:

package cn.sticki.resource.client;

import cn.sticki.common.result.RestResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author 阿杆
 */
@FeignClient(value = "resource-server", fallback = ResourceClientResolver.class)
public interface ResourceClient {

    /**
     * 上传图片接口
     *
     * @param file 图片
     * @return 图片链接
     */
    @PostMapping(value = "/private/resource/image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    RestResult<String> uploadBlogImage(@RequestPart MultipartFile file);

}

ResourceClientResolver.java:

package cn.sticki.resource.client;

import cn.sticki.common.result.RestResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author 阿杆
 */
@Slf4j
@Component
public class ResourceClientResolver implements ResourceClient{

    /**
     * 上传图片接口
     *
     * @param file 图片
     * @return 图片链接
     */
    @Override
    public RestResult<String> uploadBlogImage(MultipartFile file) {
        log.error("Resource 服务异常:uploadBlogImage 请求失败");
        return new RestResult<>(503,"fail");
    }
}

上面两个文件所需要的主要依赖:

        <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>
STM32F407 HAL库定时器触发ADC采集与DMA数据传输(定时器TIM+ADC+DMA) 在STM32F407系列微控制器的开发中,结合定时器、ADC(模数转换器)与DMA(直接存储器访问)控制器,能够显著提升数据采集与传输的效率。本文将指导你如何使用STM32 HAL库,通过定时器触发ADC1的单通道采集,利用DMA传输数据,最终通过串口将电压值打印出来。具体实现中,我们将读取ADC1的通道5(对应引脚PA5),并将转换得到的电压值发送到串口助手上进行显示。 阅读详情

相关推荐

Java开发者必备:Ollama4j客户端库全面指南与实战

在AI应用开发领域,本地部署大型语言模型(LLM)已成为降低成本和提升隐私安全的重要趋势。其核心原理是通过REST API与模型服务器交互,实现文本生成、对话和语义理解等功能。这一技术为Java生态系统带来了显著的工程价值,使开发者能够便捷地将AI能力集成到企业级应用中。Ollama4j作为一款专为Java设计的轻量级客户端库,通过封装底层HTTP通信和JSON处理,提供了类型安全、面向对象的API,极大地简化了与Ollama服务器的交互。它全面支持流式生成、多轮对话、嵌入向量计算以及高级的**工具调用**

weixin_28295799的博客 436

OpenFeign设置circuitbreaker=true后Feign的超时时间(readTimeout)失效

也就是说我们配置的readTimeout5000并没有生效。是由readTimeout来决定Feign调用服务端控制器方法的超时时间,这一点没错,但在此之前有另外一处来确定调用是否超时。结论是Hystrix的超时判断在Feign的超时判断时间,Hystrix默认超时时间是1秒.由于我用的是2021版本的Cloud,所以在主配置类上开启Hystrix的注解已经发生变更,,解决方案可直接看结尾。......

qq_45593903的博客 3154

实战指南:如何用Kamailio+FreeSWITCH搭建高并发企业通信系统(附配置模板)

本文提供了一份实战指南,详细介绍了如何利用Kamailio与FreeSWITCH构建高并发企业通信系统。通过将Kamailio作为高性能SIP信令平面处理路由与负载均衡,FreeSWITCH作为媒体与应用平面负责通话与业务逻辑,实现信令与媒体分离的电信级架构。文章深入解析了架构设计、核心配置、集群部署与性能优化,并附有配置模板,旨在帮助企业构建可水平扩展、高可用的通信解决方案。

dell8的博客 364

SpringCloud OpenFeign设置circuitbreaker=true后Feign的超时时间(readTimeout)失效

OpenFeign设置circuitbreaker=true后Feign的超时设置不起作用,一秒中直接走熔断处理返回。

weixin_43833038的博客 2178

1.30 Cubemx_STM32H743 SD_Card纳入文件管理系统

Cubemx_STM32H743 SD_Card纳入文件管理系统1、简介2、CubeMX配置 1、简介 和前面文章原理其实一样的。 1.29 Cubemx_STM32F429\H743 nandflash、spifalsh纳入文件管理系统 现在一并将SD卡、NandFlash、SPIFlash一并作为文件管理。 下面直接介绍SDcard,其他参考前面文章。 2、CubeMX配置 ...

oDuanYanGuHong的博客 1080

DPABINet保姆级教程:零代码完成脑网络分析与图论计算

本文提供DPABINet的零代码脑网络分析全流程指南。该工具通过图形化界面集成时间序列提取、连接矩阵构建、图论指标计算及统计分析,大幅降低技术门槛。重点解析了阈值选择、二值化与小世界属性计算等关键步骤,帮助研究者快速掌握脑网络分析与图论计算,提升科研效率与可重复性。

j2k3l4的博客 668

Feign整合最新SpringCloud CircuitBreaker (原hystrix)调用fallback不生效问题-解决

前几天给自己微服务项目添加个熔断器,由于用的feign,就直接选择了hystrix,三下五除二搞定,结果完美踩坑,始终报503,不进fallback,网上查了大量的资料,但我比较追新用的都是目前最新版本,没查到适用的解决,断断续续花了一天时间,记录下,给大家避避坑。 主版本:springcloud-2022.0.4,JDK17

长安三万里 2485

基于AIS动态数据与AI结合得经纬度标示算法

港口船舶智能标注系统 本系统通过结合摄像头视频流和AIS船舶动态数据,利用AI技术实现船舶实时标注功能。系统架构包括视频流处理、AIS数据解析、船舶检测匹配和坐标映射转换等模块。关键技术步骤: AIS数据获取:通过本地接收机或网络API获取船舶位置、航速等信息 AI目标检测:采用YOLOv8等模型识别视频中的船舶 船舶匹配算法:通过位置投影或运动轨迹匹配视频目标与AIS数据 坐标映射:使用相机标定技术将经纬度转换为图像坐标 实时标注:在视频画面上叠加船名、位置等关键信息 应用场景包括港口监控、智能海事管理和

qianbo042311的博客 1808

SpringCloud Fegin CircuitBreaker (原hystrix) 失效原因 —— 版本3.1.2

今天想着给自己的微服务项目添加一个的功能,正好项目内远程调用是用的feign,那就直接用hystrix好了,也比较方便。然后呢,我以为比较简单的东西,却一直不生效,资料查了个遍,硬是弄了我一上午+一下午的时间,所以记录一下,给大家避坑。如果你的环境跟我差的有点多,那这篇文章可能对你的帮助不大。原因主要有二配置文件网上很多教程都是给的旧版本的配置文件,都是,但在新版本这是不生效的,正确的配置应该是下面我这样: 可以参考官网:https://docs.spring.io/spring-cloud-openfei

阿杆的博客 2651

Sentinel--哨兵系列数据下载地址及流程更新【202310】

哨兵系列数据下载地址及流程更新。哨兵系列卫星作为哥白尼计划的一部分,主要目标便是对地球的观测任务。哥白尼计划由三部分组成:空间部分(哨兵系列太空任务与其他太空机构任务)、测量部分(提供海洋、大陆表面和大气信息的陆基和机载数据收集网络)、数据管理与全球共享。

twg666的博客 3万+

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

SpringCloud Feign整合Spring cloud circuit breaker(resilience4j)

4.编写FeignClient接口,(可以使其抛出错误来进行测试,比如在RequestMapping里配置一个不存在的地址)7.运行主类,访问接口:http://localhost:8091/hi,输出如下,3.在启动类加上@EnableFeignClients注解。6.编写控制器类,调用Feign接口。可以看到熔断逻辑被执行了。

m0_67393039的博客 878

使用HART Server PC软件进行HART设备的组态、调试和分析的完整指南

HART协议是一种用于工业自动化中的双向通信协议,能够在4-20mA模拟信号的基础上叠加数字信号,从而实现设备的远程监控和管理。HART协议兼具模拟和数字通信的优点,被广泛应用于过程控制系统中。设备组态:通过软件可以对HART设备进行组态,配置设备参数。设备调试:支持设备的在线调试和故障诊断,方便快速解决问题。数据分析:提供设备运行数据的实时监控和历史数据分析功能。报表生成:支持生成各类报表,便于数据记录和管理。

qq_38334677的博客 2469

spring cloud alibaba 学习(十二)openFeign整合Sentinel实现服务熔断

目录前言一、配置二、FeignCircuitBreakerInvocationHandler 原理三、SentinelInvocationHandler 原理四、总结 前言 熔断机制是微服务中的一种链路保护机制,当链路上的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,响应快速失败,防止雪崩效应。 一、配置 1、引入依赖 <dependency> <groupId>org.springframework.cloud</group..

码易的博客 3305

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

记录一下在学习OpenFeign时使用Hystrix不生效问题(已解决)

解决SpringCloud 在使用OpenFeign的Hystrix做熔断处理时fallback函数一直不生效

lJx__ya的博客 1303

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

springCloud中 断路器的使用和Feign中使用短路器

前几片内容主要建了三个工程Eureka Server 和provider 注册提供务,consumer 是一个消费服务,provider在配置之后可以多个启动更改端口之后,之后在template上使用LoadBalance的Ribbon负载均衡在之后使用Hystrix断路器 熔断器(CircuitBreaker) 熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦...

老秦的博客 1200

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

springcloud(四):熔断器Hystrix

说起springcloud熔断让我想起了去年股市中的熔断,多次痛的领悟,随意实施的熔断对整个系统的影响是灾难性的,好了接下来我们还是说正事。 熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”...

weixin_34294649的博客 866

SpringCloud 2021.0.9 OpenFeign 与 circuitbreaker-resilience4j 使用示例

加入断路器依赖feign.circuitbreaker.enabled: true 开启断路器注入Resilience4JConfigBuilder以上三步在服务调用方实现。

一点博客 1994

spring cloud的feign熔断策略不生效

好的启动,但是发现服务关闭还是不生效。然后改配置Client改为fallback进行生效了。对产生了疑问好奇怪,fallback模式可以,fallbackfactory不可以。最终pom文件里面需要添加。然后自己想的是可以程序如果执行方法错误,是可以进入熔断方法。1、问题目前定义feignClient有熔断回调执行方法。参考网上的配置开启熔断开启。最重要的开关需要开启。这是参考网上的配置。

jiangxiaocan123的博客 1383

openFeign+hystrix 使用! 不生效问题

org.springframework.cloud spring-cloud-starter-netflix-hystrix ${spring-cloud-starter-netflix.version}

test1372965955的博客 773

SpringCloud搭建微服务之Circuit Breaker断路器

Circuit breaker是一套规范和接口,落地实现是Resilience4j,Resilience4j是一个专为函数式编程设计的轻量级容错库,Resilience4j提供高阶函数(装饰器),以通过断路器、速率限制器、重试或隔板增强任何功能接口、lambda表达式或方法引用。可以在任何函数式接口、lambda表达式或方法引用上堆叠多个装饰器,优点是可以选择需要的装饰器

liu320yj的博客 2955

Feign的hystrix熔断器不起作用

问题描述 在开发spring-cloud项目的时候,Feign的熔断器不起作用,指定了fallback不起作用。 @FeignClient(name = "produce", fallback=ProduceCallback.class) public interface ProduceSevice { @RequestMapping("/index") String index(); } @Component public class ProduceCallback implements

技术专栏 2672

微服务之CircuitBreaker断路器

有问题的节点,快速熔断(快速返回失败处理或者返回默认兜底数据【服务降级】)。“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack)而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。服务熔断。

qq_62377885的博客 2621

Spring Cloud CircuitBreaker 源码随便看看

Spring Cloud CircuitBreaker github

qq_36968688的博客 1786

【SpringCloud】2.微服务的熔断和降级

SpringCloud+Hystrix,微服务的熔断和降级

yuhuofei的草屋 4372

SpringCloud: Feign整合Spring cloud circuit breaker(resilience4j)

1。在pom文件添加相关依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.ap

amadeus_liu2的博客 4676
上一篇: Kafka架构使用指南,精心总结,全面讲解
下一篇: 几十年工作经验总结微服务体系建设和实践,干货满满
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值