Hystrix 熔断器

1、Hystrix 概述

Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。

雪崩:一个服务失败,导致整条链路的服务都失败的情形。

Hystix 主要功能:

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

2、Hystrix 降级 – 服务提供方

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

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

定义降级方法

    @GetMapping("/{id}")
@HystrixCommand(fallbackMethod = "queryById_fallback",commandProperties = {
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000"),
@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "20"),
@HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value = "50"),
})
public User queryById(@PathVariable("id") Long id,
@RequestHeader(value = "filter",required = false) String filter,
@RequestHeader(value = "default-filter",required = false) String default_filter) {
// int i=5/0;
if(id==1){
int i=1/0;
}
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println(filter);
System.out.println(default_filter);
return userService.queryById(id);
} public User queryById_fallback(Long id, String filter, String default_filter) {
User user=new User();
user.setUsername("错误用户...");
return user;
}

使用 @HystrixCommand 注解配置降级方法

@HystrixCommand(fallbackMethod = "queryById_fallback",commandProperties = {
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000"),
@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "20"),
@HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value = "50"),
})

在启动类上开启Hystrix功能:@EnableCircuitBreaker

//@MapperScan("cn.itcast.user.mapper")
@SpringBootApplication
@EnableCircuitBreaker
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}

3、Hystrix 降级 – 服务消费方

feign 组件已经集成了 hystrix 组件。

定义feign 调用接口实现类,复写方法,即 降级方法

在 @FeignClient 注解中使用 fallback 属性设置降级处理类。

@Component
public class UserClientCallBack implements UserClient {
@Override
public User findUserById(Long id) {
User user = new User();
user.setUsername("调用端降级...");
return user;
}
}

配置开启 feign.hystrix.enabled = true

4、Hystrix 熔断

Hystrix 熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止。

调节熔断参数:

  1. circuitBreaker.sleepWindowInMilliseconds:监控时间
  2. circuitBreaker.requestVolumeThreshold:失败次数
  3. circuitBreaker.errorThresholdPercentage:失败率

5、Hystrix 熔断监控

Hystrix 提供了 Hystrix-dashboard 功能,用于实时监控微服务运行状态。 但是Hystrix-dashboard只能监控一个微服务。 Netflix 还提供了 Turbine ,进行聚合监控。

SpringCloud-07-Hystrix的更多相关文章

  1. 高并发场景-请求合并(一)SpringCloud中Hystrix请求合并

    背景 在互联网的高并发场景下,请求会非常多,但是数据库连接池比较少,或者说需要减少CPU压力,减少处理逻辑的,需要把单个查询,用某些手段,改为批量查询多个后返回. 如:支付宝中,查询"个人信 ...

  2. SpringCloud之Hystrix集群监控turbine仪表盘

    1.引入 在前一节中我们演示了单机模式下Hystrix服务监控Dashboard仪表盘,但是在实际生产中微服务都是集群模式, 为了更接近世界生产,我们在这里也给大家讲一下如何监控集群模式 2.准备工作 ...

  3. SpringCloud的Hystrix(一) 一个消费者内的两个服务监控

    一.概念与定义 1.服务雪崩 在微服务架构中,整个系统按业务拆分出一个个服务,这些服务之间可以相互调用(RPC),为了保证服务的高可用,单个服务通常会集群部署. 但是由于网络原因或自身原因,服务并不能 ...

  4. Spring-cloud (九) Hystrix请求合并的使用

    前言: 承接上一篇文章,两文本来可以一起写的,但是发现RestTemplate使用普通的调用返回包装类型会出现一些问题,也正是这个问题,两文没有合成一文,本文篇幅不会太长,会说一下使用和适应的场景. ...

  5. springcloud之hystrix熔断器-Finchley.SR2版

    本篇和大家分享的是springcloud-hystrix熔断器,其主要功能是对某模块调用失败做断路和降级,简单点就当某个模块程序出问题了并达到某阈值就限制后面请求,并降级的方式提供一个默认返回数据.最 ...

  6. java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控

    前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...

  7. 服务容错保护断路器Hystrix之一:入门示例介绍(springcloud引入Hystrix的两种方式)

    限流知识<高可用服务设计之二:Rate limiting 限流与降级> 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的 ...

  8. SpringCloud断路器(Hystrix)

    一.为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自身的原因,服务并不能保 ...

  9. SpringCloud之Hystrix:集群容错框架

    分布式环境中,可能会有一些被依赖的服务会失效,影响系统的稳定运行.Hystrix通过添加延迟阈值以及容错的逻辑,以控制分布式系统间组件的交互.Hystrix通过隔离服务间的访问点.停止它们之间的级联故 ...

  10. springcloud的Hystrix turbine断路器聚合监控实现(基于springboot2.02版本)

    本文基于方志朋先生的博客实现:https://blog.csdn.net/forezp/article/details/70233227 一.准本工作 1.工具:Idea,JDK1.8,Maven3. ...

随机推荐

  1. 同步时间,为什么我选 Chrony 而不是 NTP ?

    初识 chrony chrony 是网络时间协议(Network Time Protocol )的通用实现 它不但可以提供保持系统时间与 NTP 时钟服务器同步的服务,还能作为 NTP 服务器对其他服 ...

  2. C++ tuple(STL tuple)模板用法详解

    tuple 是C++ 11新引进的 build-in structure,但其实在其他语言中tuple的使用已经行之有年(e.g. Javascript和Python中都有tuple).C++ 11中 ...

  3. debian更新openssh 9.6

    先更新一下,然后安装libssl-dev zlib1g-dev依赖文件 apt update apt install build-essential apt-get install -y libssl ...

  4. joi

  5. C#通过泛型实现对子窗体的不同操作

    private void button1_Click(object sender, EventArgs e) { FormOperate<object>();//调用FormOperate ...

  6. 线性代数 · 矩阵 · Matlab | Cholesky 分解代码实现

    (搬运外网的代码,非原创:原网址 ) (其实是专业课作业,但感觉国内博客没有合适的代码实现,所以就搬运到自己博客了) 背景 - Cholesky 分解: 若 A 为 n 阶实对称正定矩阵,则存在非奇异 ...

  7. i-MES生产制造管理系统-生产过程检验SPC(一)

    说起质量管理,那一定少不了 SPC,SPC中文名叫统计过程控制,对生产过程中记录的数据进行分析,及时了解不良情况出现的几率,并采取必要的措施达到消除影响的目的,这其中有几个关键术语,比如 UCL等. ...

  8. STM32CubeMX教程21 CAN - 双机通信

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  9. [转帖]从Linux源码看TIME_WAIT状态的持续时间

    https://zhuanlan.zhihu.com/p/286537295 从Linux源码看TIME_WAIT状态的持续时间 前言 笔者一直以为在Linux下TIME_WAIT状态的Socket持 ...

  10. [转帖]Titan 配置

    https://www.bookstack.cn/read/TiDB-4.0/storage-engine-titan-configuration.md 开启 Titan Titan 对 RocksD ...