当前位置: 首页 > article >正文

Spring Boot 升级后,Hystrix 没了?我找到了这 3 个替代方案

Spring Boot 升级后Hystrix 没了我找到了这 3 个替代方案写在前面公司项目要从 Spring Boot 2.2.x 升级到 2.7领导让我负责调研。拿到手一看好家伙Hystrix 停更了Feign 的 fallback 怎么报错了Ribbon 也不推荐用了网上的文档要么太深奥要么太简单。没办法只能自己一点点啃顺便把踩坑经历记下来。如果你也是新手希望这篇笔记能帮到你。环境信息Spring Boot: 2.2.x → 2.7.18Spring Cloud: Hoxton.SR9 → 2021.xHystrix: 1.5.x停更→ Resilience4j 1.7.xRibbon: 2.x停更→ Spring Cloud LoadBalancerOpenFeign: 2.2.x → 3.1.x坑 1Hystrix 停更了用啥替代❌ 我当时以为很简单直接升级 Spring Boot 和 Spring Cloud心想依赖会自动更新…!-- 我当时看到这个配置心想这不简单吗 --spring-boot.version2.7.18/spring-boot.versionspring-cloud.version2021.x/spring-cloud.version结果启动失败*************************** APPLICATION FAILED TO RUN *************************** Description: The Spring Cloud project contains incompatible modules: spring-cloud-starter-netflix-hystrix is not compatible with Spring Cloud 2021.x and later.我当时就懵了。啥Hystrix 不兼容 问题根源后来查资料才明白Hystrix 停更Netflix Hystrix 从 2020 年开始就进入维护模式不再更新Spring Cloud 移除Spring Cloud 2020.xIllford开始移除了对 Hystrix 的支持官方推荐Spring 官方推荐使用 Resilience4j 作为替代方案好家伙原来是时代的眼泪。✅ 解决方案用 Resilience4j 替代 Hystrix!-- 移除 Hystrix 依赖 --!-- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-hystrix/artifactId /dependency --!-- 添加 Resilience4j 依赖 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-circuitbreaker-resilience4j/artifactId/dependency配置 Resilience4j# application.ymlresilience4j:circuitbreaker:instances:backendA:# 服务名registerHealthIndicator:trueslidingWindowSize:10failureRateThreshold:50waitDurationInOpenState:10000permittedNumberOfCallsInHalfOpenState:5automaticTransitionFromOpenToHalfOpenEnabled:truetimeout:timeout:3scancelRunningFuture:false使用方式ServicepublicclassMyService{CircuitBreaker(namebackendA,fallbackMethodfallback)publicStringcallExternalService(){// 调用外部服务returnsuccess;}// fallback 方法publicStringfallback(Exceptione){log.error(服务调用失败执行 fallback: {},e.getMessage());returnfallback result;}}教训Hystrix 已经停更了别再用官方推荐 Resilience4j坑 2Feign 的 FallbackFactory 报错了❌ 我只排除了部分依赖升级后Feign Client 的 fallback 全部报错// 原来的代码FeignClient(namesoa-protocol-control,fallbackFactoryControlVehicleFeignServiceFallback.class)publicinterfaceControlVehicleFeignService{// ...}启动报错java.lang.IllegalStateException: FallbackFactory must return an instance of the FeignClient interface我当时又懵了。这又是啥 原因分析后来才明白Hystrix 移除feign.hystrix.FallbackFactory是 Hystrix 时代的产物包路径变更Spring Cloud 2021.x 开始FallbackFactory 的包路径变了返回值要求fallback 必须返回 FeignClient 接口的实例✅ 正确做法1. 修改导入包// ❌ 原来的导入Hystrix 时代importfeign.hystrix.FallbackFactory;// ✅ 现在的导入Resilience4j 时代importorg.springframework.cloud.openfeign.FallbackFactory;2. 实现 FallbackFactorySlf4jComponentpublicclassControlVehicleFeignServiceFallbackFactoryimplementsFallbackFactoryControlVehicleFeignService{OverridepublicControlVehicleFeignServicecreate(Throwablecause){log.error(---控车接口回退异常{},cause);returnnewControlVehicleFeignService(){OverridepublicBaseResponseVoLongexecuteInstruct(UserControlVehicleDTOdto){returnBaseResponseVo.fail(PROTOCOL_CONTROL_ERROR);}OverridepublicBaseResponseVoLongselectCurrentRideUserIdByVin(Stringvin){returnBaseResponseVo.fail(PROTOCOL_CONTROL_ERROR);}// ... 其他方法都返回 fallback 结果};}}3. 使用 FallbackFactoryFeignClient(namesoa-protocol-control,contextIduserControlVehicle,fallbackFactoryControlVehicleFeignServiceFallbackFactory.class// 注意是 fallbackFactory)publicinterfaceControlVehicleFeignService{PostMapping(/protocol-control/user/control/vehicle)BaseResponseVoLongexecuteInstruct(RequestBodyUserControlVehicleDTOdto);GetMapping(/protocol-control/current/ride-user-id)BaseResponseVoLongselectCurrentRideUserIdByVin(RequestParamStringvin);// ... 其他接口}教训FallbackFactory 的包路径变了别用错导入坑 3Ribbon 也不推荐用了❌ 我以为禁用就完事了升级后发现 Ribbon 也停更了启动时各种警告WARN: Ribbon is now in maintenance mode. Consider using Spring Cloud LoadBalancer instead.这又是啥 原因分析后来才明白Ribbon 停更Netflix Ribbon 也进入维护模式官方推荐Spring Cloud LoadBalancer 作为替代配置变更LoadBalancer 的配置方式和 Ribbon 不一样✅ 正确做法1. 添加依赖!-- Spring Cloud LoadBalancer --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency2. 配置 LoadBalancer# application.ymlspring:cloud:loadbalancer:ribbon:enabled:false# 禁用 Ribboncache:ttl:30000# 缓存过期时间毫秒capacity:256# 缓存容量3. 自定义负载均衡策略ConfigurationpublicclassLoadBalancerConfig{BeanLoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}BeanpublicReactorLoadBalancerServiceInstancerandomLoadBalancer(LoadBalancerClientFactoryclientFactory){returnnewRandomLoadBalancer(clientFactory.getLazyProvider(service-name,ServiceInstanceListSupplier.class),service-name);}}4. 使用 LoadBalancerServicepublicclassMyService{AutowiredprivateRestTemplaterestTemplate;publicStringcallService(Stringdata){// 使用服务名调用LoadBalancer 会自动做负载均衡Stringurlhttp://service-name/api/data;returnrestTemplate.getForObject(url,String.class);}}教训Ribbon 已经停更了赶紧换成 LoadBalancer配置对比Hoxton vs 2021.xHoxton 配置自动配置// 啥都不用配Hystrix 自动帮你搞定EnableHystrixEnableFeignClientsSpringBootApplicationpublicclassApplication{// ...}好处简单省事坏处Hystrix 停更了性能不如 Resilience4j配置不灵活2021.x 配置手动配置// 启用 Resilience4j OpenFeign LoadBalancerEnableFeignClientsSpringBootApplicationpublicclassApplication{// ...}// Resilience4j 配置ConfigurationpublicclassResilience4jConfig{BeanpublicCircuitBreakerConfigcircuitBreakerConfig(){returnCircuitBreakerConfig.custom().failureRateThreshold(50).waitDurationInOpenState(Duration.ofSeconds(10)).slidingWindowSize(10).build();}}好处官方推荐持续更新性能更好配置更灵活坏处配置多了点我的感受虽然配置多了但心里有底Resilience4j 的 API 更现代出了问题知道从哪查推荐大家都这么配虽然麻烦点Fallback 和 FallbackFactory 的区别Fallback简单场景适用场景只需要返回默认值FeignClient(nameuser-service,fallbackUserFeignClientFallback.class// 直接返回实例)publicinterfaceUserFeignClient{GetMapping(/user/{id})UsergetUser(PathVariableLongid);}ComponentpublicclassUserFeignClientFallbackimplementsUserFeignClient{OverridepublicUsergetUser(Longid){returnnewUser(0L,default,defaultexample.com);}}好处简单代码少坏处拿不到异常信息FallbackFactory复杂场景推荐适用场景需要记录异常日志、根据异常类型做不同处理FeignClient(nameuser-service,fallbackFactoryUserFeignClientFallbackFactory.class// 工厂模式)publicinterfaceUserFeignClient{GetMapping(/user/{id})UsergetUser(PathVariableLongid);}Slf4jComponentpublicclassUserFeignClientFallbackFactoryimplementsFallbackFactoryUserFeignClient{OverridepublicUserFeignClientcreate(Throwablecause){log.error(Feign 调用失败{},cause.getMessage());// 可以记录日志returnnewUserFeignClient(){OverridepublicUsergetUser(Longid){// 根据异常类型做不同处理if(causeinstanceofConnectException){returnnewUser(0L,network-error,连接失败);}else{returnnewUser(0L,unknown-error,未知错误);}}};}}好处可以记录异常日志可以根据异常类型做不同处理更灵活坏处代码多了点我的建议简单场景用 Fallback生产环境推荐用 FallbackFactory可以记录日志验证步骤1. 检查依赖# 查看项目依赖树mvn dependency:tree|Select-Stringhystrix|resilience4j|ribbon|loadbalancer预期结果不应该有spring-cloud-starter-netflix-hystrix应该有spring-cloud-starter-circuitbreaker-resilience4j不应该有ribbon应该有spring-cloud-starter-loadbalancer2. 启动测试启动应用确认没有以下警告❌ Hystrix is not compatible with Spring Cloud 2021.x ❌ Ribbon is now in maintenance mode3. 测试 Fallback// 手动触发异常测试 fallback 是否生效TestpublicvoidtestFallback(){// 模拟服务不可用StringresultfeignClient.callService();assertEquals(fallback result,result);}我整理的一些配置Resilience4j 推荐配置# 这些是我实测好用的resilience4j:circuitbreaker:instances:backendA:registerHealthIndicator:trueslidingWindowSize:10failureRateThreshold:50waitDurationInOpenState:10000permittedNumberOfCallsInHalfOpenState:5automaticTransitionFromOpenToHalfOpenEnabled:truetimelimiter:timeoutDuration:3sLoadBalancer 推荐配置spring:cloud:loadbalancer:ribbon:enabled:falsecache:ttl:30000capacity:256监控指标# Resilience4j 的监控指标要加到 Prometheus 里resilience4j.circuitbreaker.states resilience4j.circuitbreaker.failure.rate resilience4j.circuitbreaker.slow.call.rate回滚方案如果升级后出现问题可以快速回滚恢复pom.xml中的 Spring Boot 和 Spring Cloud 版本恢复 Hystrix 依赖恢复 Ribbon 依赖恢复原来的 Fallback 实现重新编译部署教训升级前一定要留好退路总结我踩过的坑坑 1以为 Hystrix 还能用 → 启动报不兼容错误坑 2FallbackFactory 导入错误 → 报返回值类型错误坑 3Ribbon 没换成 LoadBalancer → 各种警告核心要点必须替换 Hystrix用 Resilience4j官方推荐必须修改 FallbackFactory 导入从feign.hystrix换成org.springframework.cloud.openfeign必须替换 Ribbon用 Spring Cloud LoadBalancer必须测试 fallback确保服务降级正常工作最后说两句其实也没多难就是配置多了点。我刚开始也懵后来一点点试总算是搞定了。肯定有理解不对的地方欢迎大佬指正。如果你也遇到类似问题希望这篇笔记能帮到你。

相关文章:

Spring Boot 升级后,Hystrix 没了?我找到了这 3 个替代方案

Spring Boot 升级后,Hystrix 没了?我找到了这 3 个替代方案 写在前面 公司项目要从 Spring Boot 2.2.x 升级到 2.7,领导让我负责调研。 拿到手一看,好家伙,Hystrix 停更了?Feign 的 fallback 怎么报错了&am…...

从混凝土到桥梁:手把手教你用Python和LabelImg为裂缝检测任务制作自己的数据集

从混凝土到桥梁:手把手教你用Python和LabelImg为裂缝检测任务制作自己的数据集 在基础设施健康监测领域,裂缝检测一直是计算机视觉技术落地的典型场景。现成的公开数据集虽然提供了便利,但当你的项目遇到特殊材质表面、特定光照条件或非标准拍…...

大模型环境下如何真正“提效”?别让AI成为“高级玩具”

引言 最近两年,大模型(LLM)火得不行,ChatGPT、Claude、文心一言……个个都号称能“颠覆工作方式”。但现实很骨感:很多人兴奋地装上各种AI工具,用了几周后发现——活儿没少干,时间没省下&#…...

2026届最火的五大降重复率神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI开题报告工具是依靠自然语言处理以及学术知识图谱构建起来的,它可以帮助研究者…...

2026最权威的十大AI辅助论文平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek系列论文系统地阐述大型语言模型技术架构、训练范式,核心创新涉及混合专…...

化工GHS标签软件推荐

化工 GHS 可变标签一键打印:告别预印库存,让合规标签随打随用化工行业标签从来不是简单标识,而是安全底线、合规红线、供应链生命线。GHS/CLP 标准、危险象形图、警示词、UN 编码、成分信息、运输标识…… 一张标签要承载数十项数据&#xff…...

2026年金华Google代理商精选,专业服务赢口碑

引言随着全球数字化进程的加速,越来越多的企业开始重视海外市场拓展。在这一过程中,选择合适的Google代理商成为企业成功出海的关键之一。本文将深入分析金华地区的Google代理商市场现状,并推荐几家值得信赖的专业服务商,帮助企业…...

3分钟搞定OFD转PDF:Ofd2Pdf完整使用指南与技巧分享

3分钟搞定OFD转PDF:Ofd2Pdf完整使用指南与技巧分享 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf OFD(开放版式文档)作为中国自主的电子文档格式,在政…...

AI PM | 我做了一个会自己进化的网站

今天早上 6 点,我收到一封邮件。 标题是"SkillForge 每日同步完成",内容很简单:新增 1 个 Skill,质检全部通过,0 个需要人工处理。 我看了一眼就关了。这封邮件我每天都会收到,有时候新增十几个…...

手把手教学:用THE LEATHER ARCHIVE快速生成高级感皮革时尚图片

手把手教学:用THE LEATHER ARCHIVE快速生成高级感皮革时尚图片 关键词:AI时尚设计、皮革穿搭、AI图片生成、时尚杂志风格、一键部署 摘要:本文详细介绍如何使用THE LEATHER ARCHIVE镜像快速生成具有高级感的皮革时尚图片。从环境准备到实际生…...

高端局!追觅电视多项首创技术斩获10+国际国内大奖,实力封神

近期,追觅电视交出亮眼业绩成绩单,全球累计出货、专利申请、国际大奖等多项数据表现突出;同时,品牌集中推出五大全球首创及首发技术,将画质、护眼、动态声擎等可感知创新落地为产品体验,完美呼应“技术业绩…...

BepInEx:如何为Unity游戏打造个性化体验的插件框架

BepInEx:如何为Unity游戏打造个性化体验的插件框架 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否曾经想过为喜欢的Unity游戏添加新功能、修改界面或扩展玩法&a…...

c++如何解析二进制协议中的可选字段逻辑实现及其反序列化【进阶】

二进制协议中判断可选字段存在与否需依赖协议明确定义的存在性编码方式,如前置布尔标志位、长度前缀为0或复用保留位,不可用填零或留空;解析时须严格按协议定位起始偏移、处理对齐,并区分“字段不存在”与“解析失败”。二进制协议…...

2026年制造企业必看!工厂布局规划咨询怎么选才不踩坑?

2026年制造企业必看!工厂布局规划咨询怎么选才不踩坑?2026年,制造行业降本增效竞争愈发激烈,新建工厂投建、老厂扩产升级、流程梳理等需求倒逼企业重视工厂布局规划。但布局不合理导致的空间浪费、动线混乱、成本高企等痛点&#…...

MLX‑VLM :Mac本地跑通多模态大模型的开源项目!让图片、音频、视频理解一键上手

目录 一、MLX‑VLM到底是什么? 二、核心亮点:Mac本地多模态自由 1. 全模态支持:看、听、读全都行 2. 性能拉满:苹果芯片深度优化 1) Qwen3.5‑4B‑4bit(128k 上下文) 2) gemma‑4‑31b‑it&#xff0…...

QT+FastDDS实战:手把手教你搭建ROS2风格通信模块(附避坑指南)

QTFastDDS实战:从零构建工业级通信模块的完整指南 在智能驾驶和机器人开发领域,可靠高效的进程间通信是系统设计的核心挑战。本文将带您深入探索如何将FastDDS深度集成到QT项目中,打造一个兼具ROS2通信风格和工业级稳定性的解决方案。 1. 环境…...

基于 Patroni + etcd + HAProxy 的 PostgreSQL 高可用集群实战指南

1. 为什么需要PostgreSQL高可用集群? 数据库作为现代应用的核心组件,其稳定性直接影响整个系统的可靠性。想象一下电商大促时数据库突然宕机,或者医院系统因数据库故障无法挂号——这些场景对业务连续性要求极高。传统的主从复制方案需要人工…...

抖音批量下载终极指南:5分钟掌握无水印视频采集

抖音批量下载终极指南:5分钟掌握无水印视频采集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

手把手教你用Pollyoyo实现高级图表绘制(含PlantUML和Mermaid教程)

代码驱动图表革命:Pollyoyo深度应用指南 在数据可视化和技术文档编写领域,图表的质量和效率直接影响着信息传递的效果。传统拖拽式绘图工具虽然直观,但对于需要频繁更新、版本控制或批量生成的场景显得力不从心。这正是Pollyoyo这类代码驱动…...

GitHub汉化插件终极指南:3分钟实现GitHub中文界面的完整教程

GitHub汉化插件终极指南:3分钟实现GitHub中文界面的完整教程 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub…...

如何无线地将照片从 iPhone 传输到 PC?

我们经常在 iPhone 上存储大量照片,将它们传输到电脑是备份照片并释放 iPhone 空间的好方法。通常,你会使用 USB 数据线将 iPhone 连接到电脑进行传输。但是,如果你没有 USB 数据线,或者你的电脑无法识别你的 iPhone,该…...

保姆级教程:用Python和OpenCV同时录制RealSense D435i的深度、彩色、红外和IMU数据流

RealSense D435i多模态数据采集实战:从环境配置到自动化脚本的全流程指南 当你第一次拿到RealSense D435i这款强大的深度感知设备时,可能会被它丰富的传感器阵列所震撼——RGB摄像头、立体红外摄像头、深度传感器以及惯性测量单元(IMU)的集成&#xff0c…...

数字孪生赋能智慧校园:三维可视化运维检测平台的创新实践

1. 数字孪生如何重塑智慧校园管理 第一次看到浙江工商大学的数字孪生校园平台时,我完全被震撼到了——整个校园的每栋建筑、每条道路甚至每棵树都以三维形式精确还原在屏幕上,实时数据像血液一样在虚拟校园中流动。这种技术正在彻底改变传统校园管理模式…...

医学影像预处理还有必要吗?从APTOS2019看端到端模型如何‘吃掉’传统步骤

医学影像预处理:从手工优化到端到端学习的范式迁移 在Kaggle APTOS2019糖尿病视网膜病变检测竞赛中,一个有趣的现象引发了计算机视觉领域的讨论:冠亚军团队均未采用传统图像预处理流程。这与2015年同类型竞赛中Ben Graham团队依赖精心设计的预…...

纽约出租车2022年1月-8月完整数据集分析报告-包含黄色出租车绿色出租车全量数据-地理空间信息-时间分布-支付类型分布-交通模式研究-算法训练数据

纽约出租车2022年1月-8月数据集分析报告 引言与背景 纽约市的出租车数据是研究城市交通模式、出行行为和经济活动的重要资源。本数据集包含了2022年1月和8月的黄色出租车和绿色出租车的完整运营记录,以及详细的地理空间信息。这些数据不仅对于交通规划、城市管理和…...

Python Tkinter如何实现组件隐藏与显示_利用pack_forget管理布局

pack_forget() 并未销毁组件,仅临时移除布局;组件对象、事件绑定和属性均保持有效,与 destroy() 的不可逆性有本质区别。pack_forget 后组件真的“消失”了吗?不是销毁,只是从布局管理器中临时移除;组件对象…...

Google Core Web Vitals(核心网页指标)

一、核心三大指标 (Core Web Vitals)1. LCP (Largest Contentful Paint) - 最大内容绘制:含义: 页面中最大的可见内容(如主图、大标题、视频)加载完成并渲染出来的时间。它代表了用户认为“主要内容已加载”的时刻。 目标&#xf…...

Mac option+command+方向键失效问题

optioncommand方向键失效问题 查看mac设置里的调度中心是否设置成功-看看SB网易云是不是有占用快捷键, 把这里的全局快捷键取消掉...

破局35岁:软件测试工程师的职业突围指南

被折叠的黄金十年当自动化脚本以毫秒级速度执行完上千条测试用例,当AI模型开始自动生成边界值分析报告,35岁的软件测试工程师站在技术洪流与职业周期的交汇点。行业数据显示,2025年测试岗位的AI工具渗透率已达67%,而35岁以上从业者…...

10分钟训练AI歌手:Retrieval-based Voice Conversion技术完全指南

10分钟训练AI歌手&#xff1a;Retrieval-based Voice Conversion技术完全指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Vo…...