
Hystrix中Fallback降级机制
断路器处于打开状态:当Hystrix断路器开启时,所有到达该服务的请求都会被重定向到降级逻辑。 资源池已满:当线程池、队列或信号量达到最大容量时,无法继续接受新的请求,此时会触发降级机制。 外部依赖异常:如MySQL、Redis、Zookeeper、Kafka等外部服务出现异常,导致Hystrix调用这些服务时抛出异常。 依赖调用超时:当外部依赖的访问时间超过预设阈值时,会抛出TimeoutException异常,触发降级机制。 纯内存数据缓存:通过ehcache等内存缓存库,在降级逻辑中维护一个基于LRU自动清理的本地缓存。这种方式适用于需要快速访问且数据变化较少的场景。 默认值返回:在降级逻辑中直接返回预定义的默认值。这种方式适用于数据的完整性不重要或可以接受一定程度的数据不一致的情况。 在BrandCache类中定义一个本地缓存,存储品牌ID到品牌名称的映射关系。缓存初始化时可以预加载部分数据。 在GetBrandNameCommand中,run()方法模拟调用品牌服务接口时抛出异常。通过Hystrix的降级机制,调用getFallback()方法获取本地缓存中的品牌名称。 CacheController类通过调用GetProductInfoCommand获取productInfo,并通过调用GetBrandNameCommand获取brandName。在降级逻辑中,成功获取到品牌名称后,更新productInfo并返回给用户。
发布日期:2021-05-07 14:46:26
浏览次数:18
分类:精选文章
本文共 1199 字,大约阅读时间需要 3 分钟。
基于本地缓存的 fallback 降级机制
在微服务架构中,Hystrix作为一个著名的容错工具,提供了一种降级机制,用于应对服务调用中出现的异常情况。这种降级机制通过调用本地缓存或返回默认值,确保服务能够在出现故障时继续提供服务。
以下是Hystrix降级机制的主要场景:
降级机制的核心目标是避免用户接收到系统错误信息,而是通过友好的提示或替代数据继续处理请求。
最经典的两种降级实现方式:
在HystrixCommand中,降级逻辑通过实现getFallback()接口来实现;而在HystrixObservableCommand中,则通过resumeWithFallback()方法来定义降级逻辑。
一个简单的栗子说明:
假设我们需要获取商品的品牌名称。正常逻辑是通过brandId调用品牌服务接口获取brandName。如果品牌服务接口发生故障,我们可以通过降级机制从本地缓存中获取稍微过期的品牌名称,确保服务的连续性。
具体实现步骤如下:
通过这种方式,我们可以在服务故障时,尽可能地减少对用户的影响,确保系统的稳定性和可用性。
关于Hystrix的降级配置,通过设置fallbackIsolationSemaphoreMaxConcurrentRequests属性,可以限制降级逻辑的最大并发请求量,避免资源争夺引发的服务故障。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月23日 04时14分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
STM8 GPIO模式
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
C++&&STL
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
c++中ifstream及ofstream超详细说明
2019-03-05
web项目配置
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
invalid byte sequence for encoding
2019-03-05
技术美术面试问题整理
2019-03-05
ORB-SLAM2:LoopClosing线程学习随笔【李哈哈:看看总有收获篇】
2019-03-05
js求阶乘
2019-03-05