SpringCloud(H版alibaba)框架开发教程之Hystrix——附源码(4)

参考博客:https://www.cnblogs.com/cjsblog/p/9391819.html
https://blog.csdn.net/tongtong_use/article/details/78611225

Hystrix介绍

在微服务场景中,通常会有很多层的服务调用。如果一个底层服务出现问题,故障会被向上传播给用户。我们需要一种机制,当底层服务不可用时,可以阻断故障的传播。这就是断路器的作用。他是系统服务稳定性的最后一重保障。

在springcloud中断路器组件就是Hystrix。Hystrix也是Netflix套件的一部分。他的功能是,当对某个服务的调用在一定的时间内(默认10s),有超过一定次数(默认20次)并且失败率超过一定值(默认50%),该服务的断路器会打开。返回一个由开发者设定的fallback。

fallback可以是另一个由Hystrix保护的服务调用,也可以是固定的值。fallback也可以设计成链式调用,先执行某些逻辑,再返回fallback。

Hystrix的作用

对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。

在复杂的分布式系统中阻止级联故障。

快速失败,快速恢复。

回退,尽可能优雅地降级。

启用近实时监控、警报和操作控制。

服务降级

三种情况:

访问超时

运行错误

宕机

演示,

使用一下四个服务

在这里插入图片描述
服务启动后
访问:localhost:80/consumer/payment/hystrix/ok/1

在这里插入图片描述
我们先考虑一下,

服务调用者降级
在这里插入图片描述

在这里插入图片描述
上述降级有哪些问题,要是有100个接口,要写100个降级方法吗?

优化

类上加上注解:

@RestController
@RequestMapping("/consumer")
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class OrderHystrixController {
/*** 全局fallback方法** @return*/
private String payment_Global_FallbackMethod() {return "Global异常处理信息,请稍后再试。";
}

@HystrixCommand//不加属性代表使用默认的全局处理方法。

    @HystrixCommandpublic String paymentInfo_TimeOut(@PathVariable("id") Integer id){int age = 10/0;String result = paymentHystrixService.paymentInfo_TimeOut(id);return result;}

测试

在这里插入图片描述

第三种方式

修改cloud-consumer-feign-hystrix-order80
根据cloud-consumer-feign-hystrix-order80已经有的PaymentHystrixService接口,重新新建一个类(PaymentFallbackService)实现该接口,统一为接口里面的方法进行异常处理

@Component
public class PaymentFallbackService implements PaymentHystrixService
{@Overridepublic String paymentInfo_OK(Integer id){return "-----PaymentFallbackService fall back-paymentInfo_OK ,o(╥﹏╥)o";}@Overridepublic String paymentInfo_TimeOut(Integer id){return "-----PaymentFallbackService fall back-paymentInfo_TimeOut ,o(╥﹏╥)o";}
}

注解里加上新加的
在这里插入图片描述

方法熔断的注解都不使用
在这里插入图片描述
效果
在这里插入图片描述

服务提供者降级

写一个兜底方法

在这里插入图片描述
直接访问,不通过其他服务调用,看结果
在这里插入图片描述

服务熔断

在这里插入图片描述

正数是正常的
在这里插入图片描述

负数

在这里插入图片描述

Hystrix断路器使用时最常用的三个重要指标参数

在微服务中使用Hystrix 作为断路器时,通常涉及到以下三个重要的指标参数(这里是写在@HystrixProperties注解中,当然实际项目中可以全局配置在yml或properties中)

1、circuitBreaker.sleepWindowInMilliseconds

断路器的快照时间窗,也叫做窗口期。可以理解为一个触发断路器的周期时间值,默认为10秒(10000)。

2、circuitBreaker.requestVolumeThreshold

断路器的窗口期内触发断路的请求阈值,默认为20。换句话说,假如某个窗口期内的请求总数都不到该配置值,那么断路器连发生的资格都没有。断路器在该窗口期内将不会被打开。

3、circuitBreaker.errorThresholdPercentage

断路器的窗口期内能够容忍的错误百分比阈值,默认为50(也就是说默认容忍50%的错误率)。打个比方,假如一个窗口期内,发生了100次服务请求,其中50次出现了错误。在这样的情况下,断路器将会被打开。在该窗口期结束之前,即使第51次请求没有发生异常,也将被执行fallback逻辑。

综上所述,在以上三个参数缺省的情况下,Hystrix断路器触发的默认策略为:

在10秒内,发生20次以上的请求时,假如错误率达到50%以上,则断路器将被打开。(当一个窗口期过去的时候,断路器将变成半开(HALF-OPEN)状态,如果这时候发生的请求正常,则关闭,否则又打开)

Hystrix控制面板

在这里插入图片描述
http://127.0.0.1:9001/hystrix

在这里插入图片描述

最长的输入框输入以下内容后,显示到了监控页面

http://localhost:8001/hystrix.stream

在这里插入图片描述

我们多点几次接口:localhost:8001/payment/circuit/-1,然后看效果

在这里插入图片描述
下篇讲zull网关

zull网关学习转到这里
https://blog.csdn.net/A598853607/article/details/125545802
https://blog.csdn.net/weixin_43888891/article/details/126445571
由于zull停止维护,现使用gateway代替

gateway网关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307542.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql使用Mybatis进行时间操作

MySQL中支持以下日期时间类型: DATE:存储年月日(例如:2023-04-05)。范围从"1000-01-01"到"9999-12-31" TIME:存储时分秒(例如:11:22:22)。范围从&q…

【ArkTS入门】ArkTS开发初探:语言特点和开发特点

什么是ArkTS? ArkTS是一个为鸿蒙组件而生的框架,语法亲人好用。基于TypeScript,ArkTS拓展了声明式UI、状态管理等的能力,从本质上来讲,是TypeScript的扩展,主要服务于前端。 ArkTS的开发可以满足“一次开…

字节高级Java面试真题

今年IT寒冬,大厂都裁员或者准备裁员,作为开猿节流主要目标之一,我们更应该时刻保持竞争力。为了抱团取暖,林老师开通了《知识星球》,并邀请我阿里、快手、腾讯等的朋友加入,分享八股文、项目经验、管理经验…

如何使用Spoofy检测目标域名是否存在欺骗攻击风险

关于Spoofy Spoofy是一款功能强大的域名安全检测工具,在该工具的帮助下,广大研究人员可以轻松检测单个目标域名或域名列表中的域名是否存在遭受欺诈攻击的风险。 该工具基于纯Python开发,可以根据SPF和DMARC记录来检测和判断目标域名是否可…

逻辑卷学习

磁盘分区的缺点 1.无法扩容 2.必须使用的空间 3.没有备份: 一、逻辑卷的定义 LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小…

vivado set_max_delay案例分析

案例分析 在一些设计中,某些信号在特定模式下具有恒定值。例如,在功能模式下,测试信号不切换,因此与VDD或VSS相连这取决于它们的活动水平。这也适用于在设计完成后不切换的信号已通电。同样,今天的设计有多种功能模式…

CSS 缩减顶部

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

4.14 构建onnx结构模型-Min

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Min 结点进行分析 方式 方法一&…

共享单车之租赁需求预估

文章目录 第1关&#xff1a;数据探索与可视化第2关&#xff1a;特征工程第3关&#xff1a;租赁需求预估 第1关&#xff1a;数据探索与可视化 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 读取数据 数据探索与可视化 读取数据 数据保存在./step1/bike_train…

C#/Net调用阿里云的短信服务

在C#代码里调用阿里云的短信服务&#xff0c;用于推送消息 以下介绍具体的步骤主要分为配置和代码调用 服务管理和配置 在控制台首页进入短信服务 使用流程 跟随快速学习和测试 1.申请签名 签名必须为企业名字或者对应网站、应用的名称&#xff0c;其他名称则无法通过校验 …

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

MySQL数据库备份和恢复

目录 一、备份方法 二、备份策略 三、MySQL日志管理 四、日志的查询 五、MySQL 完全备份 1、物理冷备份与恢复&#xff1a; 2&#xff0e;mysqldump 备份与恢复 六、MySQL 完全恢复 七、MySQL增量备份 八、MySQL增量恢复 1&#xff0e;一般恢复: 一、备份方法 物理备…