SpringCloud从入门到精通(六)

news2024/11/18 17:36:04

Hystrix-熔断器

Hystrix-概述

• Hystix Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。
雪崩:一个服务失败,导致整条链路的服务都失败的情形

Hystix 主要功能

隔离
        线程池隔离
        信号量隔离
降级 : 异常,超时
熔断
限流

 


Hystrix-降级

提供方降级
Hystix 降级:当服务发生异常或调用超时,返回默认数据,服务提供方降级

1. 在服务提供方,引入 hystrix 依赖

<!-- hystrix -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2. 定义降级方法
/**
* 定义降级方法:
* 1. 方法的返回值需要和原方法一样
* 2. 方法的参数需要和原方法一样
*/
public Goods findOne_fallback(int id){
  Goods goods = new Goods();
  goods.setTitle("降级了~~~");
  return goods;
}
3. 使用 @HystrixCommand 注解配置降级方法
/**
* 降级:
* 1. 出现异常
* 2. 服务调用超时
* * 默认1s超时
*
* @HystrixCommand(fallbackMethod = "findOne_fallback")
* fallbackMethod:指定降级后调用的方法名称
*/
@GetMapping("/findOne/{id}")
@HystrixCommand(fallbackMethod = "findOne_fallback",commandProperties = {
//设置Hystrix的超时时间,默认1s
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value
= "3000")
})
public Goods findOne(@PathVariable("id") int id){
  //1.造个异常
  int i = 3/0;
  try {
  //2. 休眠2秒
  Thread.sleep(2000);
  } catch (InterruptedException e) {
    e.printStackTrace();
    }
  Goods goods = goodsService.findOne(id);
  goods.setTitle(goods.getTitle() + ":" + port);//将端口号,设置到了 商品标题上
  return goods;
}
4. 在启动类上开启 Hystrix 功能: @EnableCircuitBreaker
/**
* 启动类
*/
@EnableEurekaClient //该注解 在新版本中可以省略
@SpringBootApplication
@EnableCircuitBreaker // 开启Hystrix功能
public class ProviderApp {
  public static void main(String[] args) {
    SpringApplication.run(ProviderApp.class,args);
  }
}
消费方降级
1. feign 组件已经集成了 hystrix 组件。
2. 定义 feign 调用接口实现类,复写方法,即降级方法
/**
* Feign 客户端的降级处理类
* 1. 定义类 实现 Feign 客户端接口
* 2. 使用@Component注解将该类的Bean加入SpringIOC容器
*/
@Component
public class GoodsFeignClientFallback implements GoodsFeignClient {
  @Override
  public Goods findGoodsById(int id) {
    Goods goods = new Goods();
    goods.setTitle("又被降级了~~~");
    return goods;
  }
}
3. @FeignClient 注解中使用 fallback 属性设置降级处理类。
GoodsFeignClient
@FeignClient(value = "HYSTRIX-PROVIDER",fallback =
GoodsFeignClientFallback.class)
public interface GoodsFeignClient {
  @GetMapping("/goods/findOne/{id}")
  public Goods findGoodsById(@PathVariable("id") int id);
}
4. 配置开启 feign.hystrix.enabled = true
application.yml
# 开启feign对hystrix的支持
feign:
  hystrix:
    enabled: true

Hystrix-熔断

熔断 - 概念
• Hystrix 熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败 20 次),会打开断路器,拒绝所有请求,直到服务恢复正常为止。 断路器三种状态:打开、半开、关闭

 熔断-代码演示

修改服务提供方的方法,演示熔断机制
熔断配置
• circuitBreaker.sleepWindowInMilliseconds :监控时间
• circuitBreaker.requestVolumeThreshold :失败次数
• circuitBreaker.errorThresholdPercentage :失败率

GoodsController
@RestController
@RequestMapping("/goods")
public class GoodsController {
  @Autowired
  private GoodsService goodsService;
  @Value("${server.port}")
  private int port;
  /**
  * 降级:
  * 1. 出现异常
  * 2. 服务调用超时
  * * 默认1s超时
  *
  * @HystrixCommand(fallbackMethod = "findOne_fallback")
  * fallbackMethod:指定降级后调用的方法名称
  */
  @GetMapping("/findOne/{id}")
  @HystrixCommand(fallbackMethod = "findOne_fallback",commandProperties = {
  //设置Hystrix的超时时间,默认1s
  @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value =
  "3000"),
  //监控时间 默认5000 毫秒
  @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value =
  "5000"),
  //失败次数。默认20次
  @HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "20"),
  //失败率 默认50%
  @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value = "50")
  })
  public Goods findOne(@PathVariable("id") int id){
    //如果id == 1 ,则出现异常,id != 1 则正常访问
    if(id == 1){
      //1.造个异常
      int i = 3/0;
    }
    /*try {
      //2. 休眠2秒
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }*/
    Goods goods = goodsService.findOne(id);
    goods.setTitle(goods.getTitle() + ":" + port);//将端口号,设置到了 商品标题上
    return goods;
  }
  /**
  * 定义降级方法:
  * 1. 方法的返回值需要和原方法一样
  * 2. 方法的参数需要和原方法一样
  */
  public Goods findOne_fallback(int id){
    Goods goods = new Goods();
    goods.setTitle("降级了~~~");
    return goods;
  }
}
熔断监控
• Hystrix 提供了 Hystrix-dashboard 功能,用于实时监控微服务运行状态。
但是 Hystrix-dashboard 只能监控一个微服务。
• Netflix 还提供了 Turbine ,进行聚合监控。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Neo4j构建知识图谱】:cypher操作语言加载 CSV电影人数据集链接文件

这目录 数据链接来源1、创建约束2、从 CSV 文件添加节点3、从 CSV 文件添加关系4、运行cypher查询5、清理数据库参考CSV 文件可以使用LOAD CSV密码条款。出于安全原因,无法加载本地CSV文件,这些文件必须在HTTP或HTTPS服务器(如GitHub,Google Drive和Dropbox)上公开访问。使…

Python 中将列表中的每个元素除以一个数字

Python 中将列表中的每个元素除以一个数字&#xff1a; 使用列表理解来遍历列表。在每次迭代中&#xff0c;将当前列表元素除以数字。新列表将包含除法结果。 my_list [8, 12, 20]# ✅ divide each element in list by number new_list [item / 2 for item in my_list] pri…

雪花算法笔记

SnowFlake 雪花算法 SnowFlake 中文意思为雪花&#xff0c;故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。 实现原理 雪花算法原理就是生成一个的64位比特位的 long 类型的唯一 id。 最高1位固定值0&#xff0c;因…

React Context 完美替代品 Jotai

1. 前言 React 的属性透传场景 虽然有很多方式可以实现&#xff0c;但能做到代码写的少、re-render 轻松处理的方式并不多。 而状态管理工具 Jotai 却可以很好的解决这些问题。 最近的业务和组件场景里 也在用此方式实现。 2. React Context 的不足 常规解决数据透传通常使…

BUUCTF 之 [ACTF2020 新生赛]Exec(命令执行漏洞)

BUUCTF 之 [ACTF2020 新生赛]Exec&#xff08;命令执行漏洞&#xff09;相关观察进攻相关 项目内容难度简单类型WEB靶场BUUCTF坐标Exec观察 这界面和这网页标题结合起来&#xff0c;相信给位都能猜到这个靶场中很有可能存在命令执行漏洞。 进攻 构造如下语句显示当前路径中的…

Learning Monocular Visual Odometry via Self-Supervised Long-Term Modeling

Paper name Learning Monocular Visual Odometry via Self-Supervised Long-Term Modeling Paper Reading Note URL: https://arxiv.org/pdf/2007.10983.pdf TL;DR ECCV 2020 文章&#xff0c;该文章认为在短时间序列上训练无法在长时间序列上良好泛华&#xff0c;所以受到…

从Web3视角审视茅台的“元宇宙”APP,这或是中国版的“星巴克奥德赛”

图片来源&#xff1a;由无界 AI 绘画工具生成2023年1月1日&#xff0c;一款名为《巽风数字世界》的APP登录App Store&#xff0c;这是由茅台和网易联合推出的虚拟世界APP。因而&#xff0c;有媒体称&#xff0c;茅台要进军元宇宙了&#xff01;简单讲&#xff0c;这是一款虚拟世…

Spring核心与设计思想 -- IoC与DI

Spring核心与设计思想 -- IoC与DI一、Spring 是什么&#xff1f;1.1 什么是容器&#xff1f;1.2 什么是 IoC&#xff1f;二、理解 IoC2.1 传统程序开发的问题2.2 分析2.3 控制反转式程序开发2.4 对比总结规律2.5 理解 Spring IoC三、DI 概念说明一、Spring 是什么&#xff1f; …

k8s集群部署springboot项目

一、前言 本篇,我们将基于k8s集群,模拟一个比较接近实际业务的使用场景,使用k8s集群部署一个springboot的项目,我们的需求是: 部署SpringBoot项目到阿里云服务器 ;基于容器打包,推送私有镜像仓库 ;采用K8S集群部署,对外暴露服务,pod副本扩容,公网可以访问 ;二、完…

【案例教程】GEE遥感云大数据在林业中的应用

以Earth Engine&#xff08;GEE&#xff09;为代表全球尺度地球科学数据&#xff08;尤其是卫星遥感数据&#xff09;在线可视化计算和分析云平台应用越来越广泛。该平台存储和同步遥感领域目前常用的MODIS、Landsat和Sentinel等卫星影像、气候与天气、地球物理等方面的数据集超…

禅道的部署与使用

文章目录1、禅道介绍2、下载安装3、使用3.1、创建项目3.2、添加用户3.3、团队管理3.4、测试人员提Bug3.5、开发人员修复Bug4、总结1、禅道介绍 官网地址&#xff1a;https://www.zentao.net禅道是专业的研发项目管理软件&#xff0c;有如下特点&#xff1a; 细分需求、任务、缺…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(七)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

Redis简介与使用

Redis简介与使用:数据保存在内存。&#xff08;mysql数据保存在硬盘&#xff09;是一个 高性能的key-value数据库NoSQL&#xff08;非关系数据库&#xff09;和SQL数据库&#xff08;关系数据库&#xff09;比较&#xff1a;适用场景不同:sql数据库适合用于关系特别复杂的数据查…

Java8-

https://blog.51cto.com/u_14014612/5677262 Stream到底是什么呢&#xff1f; 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 “集合讲的是数据&#xff0c;Stream讲的是计算&#xff01;” 流的构成 当我们使用一个流的时…

贴片SD卡移植FATFS文件系统

一、前言 手头有一块深圳雷龙的 SDIO 接口的贴片 SD 卡&#xff0c;挂载个文件系统把玩一下。首先介绍一下使用的贴片 SD 卡&#xff0c;以前使用的都是拔插式的 SD 卡&#xff0c;下面这个样子&#xff1a; 拿到的贴片雷龙 SD 卡如下图&#xff1a; 二、贴片 SD 卡介绍 雷龙的…

RAD Studio 11.2 详细图文安装教程 (delphi 11.2)

准备 准备好安装镜像和嘿嘿工具 镜像可以到官网下载&#xff0c;工具百度搜一搜就能找到 系统环境&#xff1a;win11 专业版 开始安装 双击镜像文件&#xff0c;然后将里面的文件复制到一个地方 注意一定要把这两个文件复制出来再运行&#xff0c;否则会嘿嘿失败 右键点击红色…

前有农民歌唱家大衣哥,后有农民女歌手草帽姐,都给山东人增光了

山东自古以来是孔孟之乡礼仪之邦&#xff0c;也诞生了很多的好儿女&#xff0c;农民歌唱家大衣哥就是其中的一位。大衣哥是从《星光大道》走红&#xff0c;也是大山东人的骄傲&#xff0c;他出名十几年不忘本&#xff0c;扎根农村为老乡们做贡献的精神&#xff0c;也感动了无数…

从0到1完成一个Vue后台管理项目(五、登录页,mock,token,axios封装)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

两大js调试工具的安装

首先要确保已经安装nodejs&#xff0c;具体安装步骤可以百度。 node-inspect工具的安装和使用 对于node-inspect工具我们可以全局安装&#xff1a; npm install node-inspect -g由于安装过cnpm&#xff0c;所以几乎在1秒内将node-inspect安装完成。 cnpm的安装方法&#xff…

Multisim14.0仿真应用举例——OCL电路输出功率和效率的研究

安装教程&#xff1a;http://t.csdn.cn/qvvqA一、理论讲解OCL全称: Output Capacitorless&#xff0c;中文名称:无输出电容的功率放大电路。功率放大带电路最重要的技术指标是最大输出功率Pom和效率η 。若输入信号Ui为正弦信号sin(wt)&#xff0c;负载上能得到的最大输出电压且…