hystrix 熔断限流降级示例区别

news/2024/11/23 3:41:53/

1.降级
降级是客户端也就是调用方判断,即调用的方法不可用或超时,调用预制好的降级方法(降级方法由服务端即被调用方提供)
调用方代码如下

@RestController
public class DemoController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/hello")@HystrixCommand(fallbackMethod = "fallback")public String hello() {String result = restTemplate.getForObject("http://demo-service/hello", String.class);return result;}// 指定降级逻辑public String fallback() {return "Service Unavailable";}}

被调用方代码

@RestController
public class DemoController {@RequestMapping("/hello")public String hello() {try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}return "Hello World";}// 添加降级逻辑@RequestMapping("/fallback")public String fallback() {return "Service Unavailable";}}

2.熔断
熔断是服务端判断的,个人认为难点在于判断熔断的指标配置,当达到熔断阈值,则会直接调用熔断方法

@RestController
public class DemoController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/hello")@HystrixCommand(fallbackMethod = "helloFallback")public String hello() {String result = restTemplate.getForObject("http://demo-service/hello", String.class);return result;}public String helloFallback() {return "Service Unavailable";}}

最后,我们还可以配置Hystrix的熔断器参数,比如熔断的阈值、窗口时间等等。在Spring Boot配置文件中添加下面的配置项即可。

yaml
hystrix.command.default.circuitBreaker.requestVolumeThreshold: 10
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds: 60000
上述代码表示当/hello接口收到连续10个请求,且其中50%以上失败时,Hystrix熔断器会启动,将所有请求转到fallbackHello方法。同时,Hystrix会在60秒后尝试关闭熔断器,重新恢复对/hello接口的代理。
通常情况下,我们会针对每个微服务方法独立地进行熔断限流降级的配置,以免某个服务出现问题时,影响到其他服务的正常使用。这样做的好处是,可以针对不同的业务场景,对不同的方法进行不同的熔断限流降级策略,也方便对不同的性能指标进行细粒度评估和监控。

但是,对于一些公共的方法,例如系统的登录、注册等方法,在进行熔断限流降级的时候,可以统一地对所有调用该方法的服务进行熔断限流降级配置,以保证系统的稳定性和可靠性。

总之,Hystrix 支持对单个方法或多个方法进行熔断限流降级的配置,具体的配置策略需要根据业务场景和要求进行权衡和选择。
3.限流
Hystrix提供了多种限流的策略,比如信号量隔离、线程池隔离以及动态配置等。下面以线程池隔离为例

@RestController
public class DemoController {@RequestMapping("/hello")@HystrixCommand(fallbackMethod = "fallback", threadPoolKey = "helloThreadPool")public String hello() throws InterruptedException {Thread.sleep(500);return "Hello World!";}// 服务降级处理方法public String fallback() {return "Service Busy!";}}

配置线程池的相关参数。可以在application.properties文件中添加如下配置:

hystrix.threadpool.default.coreSize=2 # 线程池核心线程数
hystrix.threadpool.default.maxQueueSize=10 # 线程池等待队列大小
hystrix.threadpool.default.queueSizeRejectionThreshold=20 # 线程池拒绝任务的等待队列阈值。


http://www.ppmy.cn/news/224742.html

相关文章

css:CSS 线性渐变linear-gradient

CSS 渐变使您可以显示两种或多种指定颜色之间的平滑过渡。 CSS 定义了两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线)径向渐变(由其中心定义) 参考文档 CSS 线性渐变 https://www.w3school.com.cn/css/css3_…

网络故障管理

网络故障管理是以最快的方式查找、隔离和排除网络故障的过程。故障管理是网络管理的重要组成部分,它通过快速解决故障来最大限度地减少停机时间并防止设备故障,从而确保最佳的网络可用性并防止业务损失。 网络故障监控是故障管理的第一步,因…

访问学者申请中4个难点解析

近年来,越来越多的学者希望通过申请成为访问学者来扩展他们的研究领域和学术交流。然而,访问学者申请过程中存在一些难点,下面知识人网来解析其中的4个难点。 首先,第一个难点是选择适合的研究机构。访问学者需要仔细考虑自己的研…

L1-084 拯救外星人

你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“57”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。 本题就请你写程…

L1-4 拯救外星人

你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“57”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。 本题就请你写程…

外星人 AW720M评测

外星人 AW720M 游戏鼠标支持有线、无线、蓝牙三种连接模式;搭载定制版 PixArt 传感器,拥有 26,000 超高 DPI 和 50G 加速度以及 650 IPS 移动速度;搭载光学微动开关,7000 万次点击寿命,主按键预载磁张力;支…

7-122 外星人的一天

地球上的一天是 24 小时。但地球上还有一些精力和勤奋度都远超一般人的大神级人物,他们的“一天”是以 48 小时为周期运转的,这种人被人们尊称为“外星人”。比如普通人的周一早 8:30 是外星人的周一早 4:15;普通人的周二早 9:21 是外星人的周…

700MHz设备对广播电视信号的干扰有哪些?

700MHz,由于其较长的波长,良好的传播与覆盖特性,不仅一直被多国用作广播电视信号频率,4G LTE和5G NR也同样看好这一频段,并在此频段上进行了相应的部署和规划。目前已经有超过45个国家和地区,将700MHz频段部…