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

Spring Cloud Hystrix 详细示-元一软件

Hystrix 是 Spring Cloud 中实现服务熔断、降级、隔离的核心组件用于解决微服务架构中的雪崩效应核心是快速失败、优雅降级、自动恢复。以下从环境搭建、基础使用、高级配置、Feign 整合、监控5 个维度提供完整示例。一、项目环境准备1. 依赖引入Maven创建 Spring Boot 项目添加 Hystrix 及 Spring Cloud 基础依赖xmlparent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.3.12.RELEASE/version !-- 适配 Spring Cloud Hoxton.SR12 -- /parent dependencies !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Spring Cloud Netflix Hystrix 核心依赖 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-hystrix/artifactId /dependency !-- 服务注册与发现Eureka可选用于服务调用 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-eureka-client/artifactId /dependency !-- 负载均衡RestTemplate 调用 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-loadbalancer/artifactId /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId versionHoxton.SR12/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement2. 启动类开启 Hystrix在启动类添加EnableHystrix或EnableCircuitBreaker注解开启熔断功能java运行import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; SpringBootApplication EnableHystrix // 开启 Hystrix 熔断、降级功能 public class HystrixDemoApplication { public static void main(String[] args) { SpringApplication.run(HystrixDemoApplication.class, args); } // 注册负载均衡的 RestTemplate用于调用远程服务 Bean LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }3. 基础配置application.ymlyamlserver: port: 8080 # 服务端口 spring: application: name: hystrix-demo # 服务名 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ # Eureka 注册中心地址可选二、基础使用HystrixCommand 实现熔断降级1. 核心注解HystrixCommand该注解用于标记需要 Hystrix 保护的方法核心参数fallbackMethod指定降级方法服务失败 / 超时时执行commandProperties配置熔断、超时、隔离等规则groupKey命令分组用于线程池隔离threadPoolKey线程池标识实现线程池隔离2. 示例 1基础熔断降级RestTemplate 调用创建服务类模拟调用远程用户服务配置熔断规则与降级逻辑java运行import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; Service public class UserService { Autowired private RestTemplate restTemplate; /** * 调用远程用户服务配置熔断与降级 * 熔断规则10秒内请求数≥20失败率≥50%则熔断5秒 * 超时时间3秒 */ HystrixCommand( fallbackMethod getUserFallback, // 降级方法 commandProperties { // 熔断触发条件请求数阈值 HystrixProperty(name circuitBreaker.requestVolumeThreshold, value 20), // 熔断触发条件失败率阈值百分比 HystrixProperty(name circuitBreaker.errorThresholdPercentage, value 50), // 熔断后休眠时间毫秒休眠后进入半开状态 HystrixProperty(name circuitBreaker.sleepWindowInMilliseconds, value 5000), // 执行超时时间毫秒 HystrixProperty(name execution.isolation.thread.timeoutInMilliseconds, value 3000) } ) public String getUserById(Long userId) { // 调用远程用户服务user-service 为注册中心的服务名 return restTemplate.getForObject(http://user-service/users/ userId, String.class); } /** * 降级方法参数、返回值必须与原方法一致 * 可接收 Throwable 参数获取异常信息 */ public String getUserFallback(Long userId, Throwable throwable) { return 用户服务不可用降级返回用户ID userId 异常信息 throwable.getMessage(); } }3. 示例 2多级降级级联 Fallback当一级降级也可能失败时配置多级降级java运行Service public class OrderService { HystrixCommand(fallbackMethod orderFallback1) public String createOrder(Long userId, Long productId) { // 模拟创建订单可能失败 if (Math.random() 0.3) { throw new RuntimeException(订单服务异常); } return 订单创建成功用户 userId 商品 productId; } // 一级降级 public String orderFallback1(Long userId, Long productId, Throwable e) { System.out.println(一级降级执行 e.getMessage()); // 模拟一级降级失败 if (Math.random() 0.5) { throw new RuntimeException(一级降级失败); } return 一级降级订单创建失败稍后重试; } // 二级降级一级降级失败时执行 HystrixCommand(fallbackMethod orderFallback2) public String orderFallback1(Long userId, Long productId) { return 二级降级系统繁忙请稍后再试; } // 最终降级 public String orderFallback2(Long userId, Long productId) { return 最终降级服务不可用请联系客服; } }4. 示例 3根据异常类型定制降级在降级方法中通过Throwable判断异常类型返回不同降级信息java运行Service public class PayService { HystrixCommand(fallbackMethod payFallback) public String pay(Long orderId, Double amount) { // 模拟不同异常 if (Math.random() 0.7) { throw new RuntimeException(支付服务内部错误); } else if (Math.random() 0.4) { throw new java.util.concurrent.TimeoutException(支付服务超时); } return 支付成功订单 orderId 金额 amount; } public String payFallback(Long orderId, Double amount, Throwable e) { if (e instanceof java.util.concurrent.TimeoutException) { return 降级支付服务超时请稍后重试; } else if (e instanceof RuntimeException) { return 降级支付服务异常订单 orderId 支付失败; } else { return 降级系统繁忙请稍后再试; } } }三、高级配置线程池隔离与全局配置1. 线程池隔离核心Hystrix 默认使用线程池隔离为每个服务调用分配独立线程池避免一个服务故障耗尽所有线程。java运行Service public class StockService { /** * 配置独立线程池核心线程数5最大线程数10队列大小20 */ HystrixCommand( fallbackMethod stockFallback, threadPoolKey stockThreadPool, // 线程池标识 threadPoolProperties { HystrixProperty(name coreSize, value 5), // 核心线程数 HystrixProperty(name maximumSize, value 10), // 最大线程数 HystrixProperty(name maxQueueSize, value 20) // 队列大小 } ) public String deductStock(Long productId, Integer num) { return restTemplate.getForObject(http://stock-service/stock/deduct?productId productId num num, String.class); } public String stockFallback(Long productId, Integer num) { return 库存服务降级商品 productId 库存扣减失败; } }2. 全局配置application.yml通过配置文件统一设置 Hystrix 全局规则避免每个方法重复配置yamlhystrix: command: default: # 全局默认配置 circuitBreaker: requestVolumeThreshold: 20 # 10秒内请求数≥20才判断熔断 errorThresholdPercentage: 50 # 失败率≥50%触发熔断 sleepWindowInMilliseconds: 5000 # 熔断后休眠5秒 execution: isolation: thread: timeoutInMilliseconds: 3000 # 全局超时3秒 fallback: isolation: semaphore: maxConcurrentRequests: 10 # 降级方法最大并发数 threadpool: default: # 全局线程池配置 coreSize: 10 # 核心线程数 maximumSize: 20 # 最大线程数 maxQueueSize: 50 # 队列大小四、Feign 整合 Hystrix微服务常用Spring Cloud Feign 天然支持 Hystrix无需额外注解只需开启配置并实现降级接口。1. 开启 Feign Hystrixapplication.ymlyamlfeign: hystrix: enabled: true # 开启 Feign 整合 Hystrix2. Feign 接口定义java运行import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; // 指定服务名与降级类 FeignClient(value user-service, fallback UserFeignFallback.class) public interface UserFeignClient { GetMapping(/users/{userId}) String getUserById(PathVariable(userId) Long userId); }3. 降级类实现java运行import org.springframework.stereotype.Component; Component public class UserFeignFallback implements UserFeignClient { Override public String getUserById(Long userId) { return Feign 降级用户服务不可用用户ID userId; } }4. 使用 Feign 调用java运行Service public class FeignUserService { Autowired private UserFeignClient userFeignClient; public String getUser(Long userId) { return userFeignClient.getUserById(userId); } }五、Hystrix 监控Dashboard1. 引入监控依赖xmldependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-hystrix-dashboard/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency2. 开启监控启动类java运行import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; SpringBootApplication EnableHystrix EnableHystrixDashboard // 开启 Hystrix 监控仪表盘 public class HystrixDemoApplication { // ... 其他代码 }3. 暴露监控端点application.ymlyamlmanagement: endpoints: web: exposure: include: hystrix.stream # 暴露 Hystrix 监控流4. 访问监控面板启动服务访问http://localhost:8080/hystrix在输入框填入监控流地址http://localhost:8080/actuator/hystrix.stream点击「Monitor Stream」即可查看服务调用的熔断状态、请求数、失败率、线程池状态等实时数据。六、核心原理总结断路器状态Closed闭合正常调用统计失败率Open打开触发熔断直接执行降级不调用远程服务Half-Open半开熔断休眠后允许少量请求测试服务是否恢复成功则闭合失败则重新打开隔离机制线程池隔离默认/ 信号量隔离避免服务间相互影响降级逻辑服务失败 / 超时 / 熔断时快速返回预设响应提升用户体验

相关文章:

Spring Cloud Hystrix 详细示-元一软件

Hystrix 是 Spring Cloud 中实现服务熔断、降级、隔离的核心组件,用于解决微服务架构中的雪崩效应,核心是快速失败、优雅降级、自动恢复。以下从环境搭建、基础使用、高级配置、Feign 整合、监控5 个维度提供完整示例。一、项目环境准备1. 依赖引入&…...

保姆级教程:用Java SpringBoot实现钉钉机器人自动回复@消息(附完整源码)

企业级钉钉机器人开发实战:SpringBoot实现智能消息处理 最近在帮一家电商公司搭建内部工单系统时,遇到了一个典型需求:当员工在钉钉群里机器人提交问题时,需要自动识别用户身份并回复处理进度。这个看似简单的功能,在…...

OpenClaw+GLM-4.7-Flash:自动化内容创作全流程实战

OpenClawGLM-4.7-Flash:自动化内容创作全流程实战 1. 为什么需要自动化内容创作 作为一个经常需要产出技术文档的开发者,我发现自己总是陷入类似的困境:每次开始写作前,要花大量时间收集资料、整理思路、调整格式。最痛苦的是&a…...

泰勒级数实战:如何快速估算任意数的平方根(附Python代码)

泰勒级数实战:如何快速估算任意数的平方根(附Python代码) 在工程计算和科学实验中,快速估算平方根是一项常见需求。传统查表法精度有限,而现代计算器又过度依赖硬件。泰勒级数展开提供了一种优雅的数学解决方案——通过…...

旧设备复活计划:Windows 11硬件限制解除完全指南

旧设备复活计划:Windows 11硬件限制解除完全指南 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 随着操作系统升级需求的增长,大量性能尚可的旧设备因TPM 2.0等硬件限制无…...

UIImage命名检查黑科技:用Runtime拦截空字符串导致的CUICatalog崩溃

UIImage命名检查黑科技:用Runtime拦截空字符串导致的CUICatalog崩溃 在iOS开发中,图片资源管理看似简单,却暗藏玄机。当团队规模扩大、项目复杂度上升时,一个被忽视的空字符串可能引发连锁反应——[UIImage imageNamed:"&quo…...

30/50/20分期怎么设?SAP付款条件Z028实战案例详解(附基准日期避坑指南)

SAP非等额分期付款实战指南:30/50/20比例配置与基准日期避坑 在工程项目、大额设备采购等业务场景中,分期付款是常见的交易方式。不同于标准的等额分期,工程类合同常采用30/50/20这类非对称比例,首期支付30%预付款,中期…...

VBA Collection vs Dictionary:如何根据项目需求选择最佳数据容器?

VBA Collection与Dictionary深度对比:如何为项目选择最优数据容器? 在VBA开发中,数据容器的选择往往决定了代码的执行效率和可维护性。Collection和Dictionary作为两种最常用的数据结构,各自拥有独特的优势和应用场景。本文将深入…...

OpenClaw技能开发入门:为nanobot编写自定义文件处理器

OpenClaw技能开发入门:为nanobot编写自定义文件处理器 1. 为什么需要自定义技能 去年夏天,我发现自己每周都要花两小时手动整理项目文档——把分散在各处的Markdown文件合并、去重、重新编号。当我第三次在重复劳动中睡着时,终于决定用Open…...

融合熵权、灰色关联与TOPSIS的MATLAB实战:构建智能综合评价系统

1. 为什么需要综合评价系统? 做数据分析的朋友们应该都遇到过这样的困扰:面对一堆评价指标和候选方案,到底该怎么科学地做出选择?比如要评选优秀员工,有业绩、考勤、客户评价等多个维度;或者要选择供应商&a…...

智慧工业之电子元器件识别 手绘电路图识别 电路图工作原理模拟器 电子设备自动化检测数据集 元器件分拣数据集 电路故障诊数据第10616期

电子元器件目标检测数据集 README项目概述 本数据集聚焦于电子设备与电路场景下的元器件识别任务,为工业视觉检测、电子设备自动化拆解与智能维修等领域提供高质量标注数据,助力电子制造与维护的智能化升级。核心数据信息维度内容数据类别共45类&#xf…...

矢量网络分析仪(VNA)校准实战:从原理到操作全解析

1. 矢量网络分析仪校准的核心原理 第一次接触矢量网络分析仪(VNA)时,我完全被那些复杂的S参数曲线搞懵了。直到老师傅告诉我:"VNA就是个高级照妖镜,校准就是给它配副好眼镜"。这个比喻让我恍然大悟——没有校…...

探索前沿技术:如何利用AI优化现代软件开发流程

1. AI如何改变现代软件开发的面貌 十年前我刚入行时,软件开发还停留在"人肉编程"阶段。每个功能都要手动敲代码,调试全靠print大法,项目管理用Excel表格记录进度。现在回想起来,当时的开发方式就像用手工织布机做衣服—…...

智慧电子元器件识别 电子废弃物场景下的物料分类与元器件识别 元器件分拣数据集 电子废弃物自动分拣 电容数据集 保险丝数据集 第10617期

电子废弃物分类与元器件检测数据集 README 项目概述 本数据集专注于电子废弃物场景下的物料分类与元器件识别任务,为固废资源化利用、智能拆解及环保检测领域提供高质量标注数据,助力电子废弃物的高效回收与无害化处理。核心数据信息维度内容数据类别共1…...

算法高频核心:网格方向遍历从入门到精通

摘要:二维网格方向遍历是算法笔试、面试绝对高频考点,覆盖井字棋、五子棋、岛屿统计、单词搜索、游戏模拟等场景。本文用一套通用方向数组模板,打通 4 方向 / 8 方向遍历、k 连珠判定、DFS 连通块、回溯搜索四大题型,附完整可运行 C++ 代码与 LeetCode 原题对照,新手也能快…...

10分钟掌握AI-Render:在Blender中玩转Stable Diffusion的终极指南

10分钟掌握AI-Render:在Blender中玩转Stable Diffusion的终极指南 【免费下载链接】AI-Render Stable Diffusion in Blender 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Render 你是否想过,在Blender这个强大的3D创作软件中,直接…...

3个高效技巧让ThreeFingersDragOnWindows实现Windows触控板革命

3个高效技巧让ThreeFingersDragOnWindows实现Windows触控板革命 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDragOnWi…...

AI 模型推理引擎性能对比

AI模型推理引擎性能对比:如何选择最优方案 随着AI技术在各行业的广泛应用,模型推理引擎的性能成为影响落地效果的关键因素。不同的推理引擎在计算效率、资源占用、兼容性等方面表现各异,如何选择最适合的引擎成为开发者关注的焦点。本文将从…...

如何让Windows 11重获新生?系统优化工具Win11Debloat全面评测

如何让Windows 11重获新生?系统优化工具Win11Debloat全面评测 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以…...

C++协程(C++20)原理剖析:co_await的实现机制

C20引入的协程机制为异步编程带来了革命性变化,其中co_await作为核心操作符,其实现机制值得深入探讨。本文将剖析co_await背后的魔法,揭示协程如何通过挂起与恢复实现高效异步。 协程三要素解析 协程由promise对象、协程句柄和协程状态三部…...

绕过RK3588的RGA坑:手把手教你修改YOLOv8分割模型部署代码,用CPU预处理替代硬件加速

RK3588部署YOLOv8分割模型的稳定化实践:从RGA报错到CPU预处理方案优化 当你在RK3588开发板上部署YOLOv8分割模型时,是否遇到过这样的场景:模型转换和交叉编译一切顺利,却在运行时突然弹出"Failed to call RockChipRga interf…...

开源工具KeyboardChatterBlocker:机械键盘连击问题的智能解决方案

开源工具KeyboardChatterBlocker:机械键盘连击问题的智能解决方案 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 机械键盘以…...

24小时运行OpenClaw:nanobot镜像监控网站变更并邮件报警

24小时运行OpenClaw:nanobot镜像监控网站变更并邮件报警 1. 为什么需要自动化网站监控 上周我负责的一个项目突然出了状况——客户官网的产品价格页面被意外修改,导致大量用户投诉。团队花了整整两天才发现问题根源。这件事让我意识到,对于…...

个人知识管理:用OpenClaw+nanobot构建第二大脑

个人知识管理:用OpenClawnanobot构建第二大脑 1. 为什么需要第二大脑? 作为一名技术写作者,我每天要处理大量信息:技术文档、行业报告、代码片段、会议记录...这些碎片化知识散落在浏览器书签、微信收藏、本地文档里&#xff0c…...

LVGL显存、FreeRTOS堆栈、全局变量:在128KB RAM的STM32F407上如何做内存预算与平衡?

LVGL显存、FreeRTOS堆栈与全局变量的内存博弈:STM32F407的128KB RAM精算指南 当一块STM32F407芯片的128KB RAM需要同时供养LVGL的华丽界面、FreeRTOS的多任务调度以及应用层的全局变量时,开发者面临的挑战不亚于一位财务总监在有限预算下平衡多个部门的开…...

springboot-vue+nodejs大学生社团管理系统

目录技术栈选择系统模块划分开发阶段安排部署与优化测试重点项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Spring Boot框架,提供RESTful API接口,处理业务逻辑与数据库交互。 前端…...

springboot-vue+nodejs大学生作业管理系统的设计与实现

目录技术栈选择系统模块划分开发阶段规划部署方案设计进度与风险管理项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Spring Boot框架,提供RESTful API接口,处理业务逻辑和数据持久化…...

如何使用铜钟音乐打造纯净无广告的个人听歌空间

如何使用铜钟音乐打造纯净无广告的个人听歌空间 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特!(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Trending/to/tonzhon-mus…...

GuwenBERT:重构古文智能理解的3个技术维度

GuwenBERT:重构古文智能理解的3个技术维度 【免费下载链接】guwenbert GuwenBERT: 古文预训练语言模型(古文BERT) A Pre-trained Language Model for Classical Chinese (Literary Chinese) 项目地址: https://gitcode.com/gh_mirrors/gu/g…...

告别规则几何!用Python+Matlab为gprMax创建任意复杂地质模型(附HDF5文件生成代码)

突破几何限制:用PythonMatlab构建gprMax复杂地质模型的完整指南 地质雷达模拟领域的研究者常面临一个尴尬困境:脑海中的地质结构复杂多变,但建模工具却只能生成规则几何体。本文将彻底解决这一矛盾,带您掌握跨平台协作建模技术&am…...