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. 使用jasypt加密配置的时候,报错:DecryptionException: Unable to decrypt

    前几天分享了一篇<Spring Boot 2.x基础教程:加密配置中的敏感信息> ,然后看到群里有小伙伴反应跟着这篇文章出现了这个异常com.ulisesbocchio.jasyptspr ...

  2. freeswitch APR库内存池

    概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. apr库中的大部分API都需要依赖于内存池,使用内存池简化内存管理,提高内存分配效率,减少内存操作中出错的概 ...

  3. java进阶(21)--集合基础

    一.基本概念 1.数组其实是一个集合,二集合是一个容器 2.集合不能直接存储基本数据类型,也不能存java对象,存储的是引用数据类型 list.add(100); //自动装箱Integer 3.ja ...

  4. RL 基础 | 如何搭建自定义 gym 环境

    需实现的方法: __init__(self): 需定义 action_space 和 observation_space,使用 space.Box 之类来表示(from gym import spac ...

  5. 06-Shell内置命令

    1.内置命令介绍 Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行文件. 使用type 来确定一个命令是否是内置命令: type 命令 通常来说,内置命令会 ...

  6. 【秘籍揭秘】如何高速下载游戏、Switch资源?省时省力一网打尽!

    百度云盘SVIP合租啦亲爱的考研党和游戏玩家们,我今天要分享的是一份独家秘籍!你是不是常常为下载游戏或Switch资源而烦恼?是不是经常遇到下载速度慢.限速等问题,让你等待无尽?别担心,我有一个绝密的 ...

  7. [转帖]TLS 加速技术:Intel QuickAssist Technology(QAT)解决方案

    https://zhuanlan.zhihu.com/p/631184323   3 人赞同了该文章 作者:vivo 互联网服务器团队- Ye Feng 本文介绍了 Intel QAT 技术方案,通过 ...

  8. [转帖]oswatch--Linux

    https://www.fengnayun.com/news/content/46922.html 一 官方参考OSWatcher (Includes: [Video]) (文档 ID 301137. ...

  9. Redisson/Jedis 线程数不足报错问题的思考

    Redisson/Jedis 线程数不足报错问题的思考 背景 最近公司内总出现 Redis相关的错误 !-_-! 看我最近发的博客就可以看的出来. 这个错误提示其实是 两年前 清明节进行 压测时发现的 ...

  10. [转帖]Redis命令详解:Keys

    https://jackeyzhe.github.io/2018/09/22/Redis%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3%EF%BC%9AKeys/ 介绍完Re ...