`

Hystrix断路器

阅读更多
1. Hystrix断路器简介

hystrix对应的中文名字是"豪猪",豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。

在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。


2. 服务雪崩效应

1.1 当一个请求依赖多个服务的时候:正常情况下的访问

1.2 当请求的服务中出现无法访问、异常、超时等问题时,那么用户的请求将会被阻塞

1.3 如果多个用户的请求中,都存在无法访问的服务,那么他们都将陷入阻塞的状态中

2.1 Hystrix的引入,可以通过服务熔断和服务降级来解决这个问题


3. Hystrix服务熔断和服务降级

Hystrix服务熔断@HystrixCommand
Hystrix服务降级fallbackMethod

熔断机制是应对雪崩效应的一种微服务链路保护机制。
当某个服务不可用或者响应时间超时,会进行服务降级,进而熔断该节点的服务调用,快速返回自定义的错误影响页面信息。


4. Hystrix服务熔断和服务降级实例

4.1) 带服务熔断的服务提供者项目microservice-student-provider-hystrix-1004搭建

new -> Maven Module
    -> create a simple project
Module Name:microservice-student-provider-hystrix-1004
Parent Project:microservice
Working set:SpringCloud
    -> Artifact
Group Id:com.andrew.springcloud
Artifact Id:microservice-student-provider-hystrix-1004
Version:0.0.1-SNAPSHOT
Packaging:jar

代码与microservice-student-provider-1001相同


4.2) 带服务熔断的服务提供者项目microservice-student-provider-hystrix-1004的pom.xml增加hystrix依赖

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


4.3) 带服务熔断的服务提供者项目microservice-student-provider-hystrix-1004的application.yml修改下端口和实例名称

port: 1004
 instance-id: microservice-student-hystrix:1004 #客户端实例名称


4.4) 带服务熔断的服务提供者项目microservice-student-provider-hystrix-1004的启动类StudentProviderHystrixApplication_1004.java增加注解@EnableCircuitBreaker和getInfo方法

@ResponseBody
@GetMapping(value="/getInfo")
@HystrixCommand(fallbackMethod="getInfoFallback")
public Map<String,Object> getInfo() throws InterruptedException{
    Thread.sleep(2000);
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("code", 200);
    map.put("info", "业务数据xxxxx");
    return map;
}
public Map<String,Object> getInfoFallback() throws InterruptedException{
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("code", 500);
    map.put("info", "系统出错,稍后重试");
    return map;
}


4.5) 服务消费者microservice-student-consumer-80的StudentConsumerController.java增加getInfo方法

@SuppressWarnings("unchecked")
@GetMapping(value="/getInfo")
@ResponseBody
public Map<String,Object> getInfo(){
    return restTemplate.getForObject(PRE_HOST+"/student/getInfo/", Map.class);
}


正常访问返回的是200业务数据xxxxx
这里使用Thread.sleep(2000)模拟超时
加上@HystrixCommand注解以及fallbackMethod表明这个方法在没有异常以及没有超时(hystrix默认1秒算超时)的情况,才返回正常的业务数据;
否则进入fallback指定的本地方法

启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-hystrix-1004
启动microservice-student-consumer-80

测试服务提供者:
http://localhost/student/getInfo

使用Thread.sleep(500);测试正常
{"code":200,"info":"业务数据xxxxx"}

使用Thread.sleep(2000);测试超时
{"code":500,"info":"系统出错,稍后重试"}


5. hystrix默认超时时间的设置

Hystrix默认超时时间是1秒,我们可以通过hystrix源码看到
hystrix-core.jar
  -> com.netflix.hystrix
    -> HystrixCommandProperties类
      -> default_executionTimeoutInMilliseconds属性 默认的超时时间


5.1) 带服务熔断的服务提供者项目microservice-student-provider-hystrix-1004修改application.yml配置

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000

启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-hystrix-1004
启动microservice-student-consumer-80

测试服务提供者:
http://localhost/student/getInfo

使用Thread.sleep(2000);测试正常
{"code":200,"info":"业务数据xxxxx"}

使用Thread.sleep(4000);测试超时
{"code":500,"info":"系统出错,稍后重试"}
分享到:
评论

相关推荐

    Hystrix断路器.md

    断路器

    25-Spring Cloud断路器Hystrix1

    Spring Cloud 提供了断路器模式的实现,名为 Hystrix,用于防止服务间的级联故障,提高系统的容错性。断路器模式的核心思想是在调用远程服务时,通过一个中间层(即断路器)来监控调用的健康状况。当服务出现故障时...

    Spring Cloud Netfix Hystrix断路器例子

    Spring Cloud Netfix Hystrix断路器例子工程。使用Spring Cloud Netflix Hystrix以及Spring RestTemplate或Spring Cloud Netflix Feign实现断路器模式。

    Hystrix 断路器

    **Hystrix 断路器详解** 在分布式系统中,Hystrix 是一款非常重要的容错管理工具,由 Netflix 开源。它通过提供断路器模式来隔离服务间的调用,防止因某个服务不可用而影响整个系统的稳定。断路器机制在微服务架构...

    spring cloud Hystrix断路器的使用(熔断器)

    "spring cloud Hystrix断路器的使用" spring cloud Hystrix断路器是Netflix开发的一种断路器模式,用于防止级联故障在微服务架构中。断路器的使用可以防止服务之间的级联故障,使得系统更加稳定和可靠。 Hystrix...

    spingcloud整合eureka、 Hystrix断路器的降级.zip

    “断路器”本身是一种开关装置,当某个服务单元发生故障监控(类似熔断保险丝),向调用方法返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方法无法处理的异常,这样就保证了服务...

    详解Spring Cloud Hystrix断路器实现容错和降级

    Spring Cloud Hystrix断路器实现容错和降级 Spring Cloud Hystrix断路器是一种实现容错和降级的机制,它可以在服务不可用时,对配置了断路器的方法实行降级策略,临时调用备用方法。这种机制可以避免服务雪崩效应,...

    spring cloud微服务框架demo完整可用2版(注册中心+生产者+消费者+feign负载均衡+hystrix断路器+仪表盘+gate路由网关+配置中心)

    spring cloud微服务框架demo完整可用2版 比第一版多集成了mybatis...(注册中心+生产者+消费者+feign负载均衡+hystrix断路器+仪表盘+gate路由网关+config配置中心+mybatis+oracle+mybatisPlus generator代码自动生成)

    spingcloud整合eureka、 Hystrix断路器的降级、熔断、服务监控图形.zip

    Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。复杂分布式...

    SpringCloud——断路器(Hystrix)

    在分布式系统中,Spring Cloud Hystrix 是一个关键的组件,它作为一个断路器来防止服务雪崩。断路器模式是微服务架构中的一个重要概念,用于提高系统的容错性和稳定性。下面我们将深入探讨 Spring Cloud Hystrix 的...

    camel-hystrix-endpoint:将子端点包装到同步hystrix断路器中的骆驼端点

    骆驼hystrix端点 将子端点包装到同步hystrix断路器中的骆驼端点。 该项目可将hystrix组件轻松集成到骆驼路线中。 一个非常简单的示例可能如下所示:private class TestRoute extends RouteBuilder {@Overridepublic ...

    详解SpringCloud微服务架构之Hystrix断路器

    通过以上步骤,我们可以构建一个利用Hystrix断路器的Feign客户端,实现对故障服务的智能处理,提高系统的整体稳定性和可靠性。 总结来说,Spring Cloud Hystrix是一个强大的工具,它通过断路器模式有效地解决了...

    【微服务架构】SpringCloud之断路器(hystrix)

    Feign使得编写消费其他服务的客户端变得更简单,同时也内置了Hystrix断路器,以确保高可用性。 总之,Spring Cloud Hystrix作为微服务架构中的关键组件,通过断路器机制提高了系统的稳定性和容错性。结合Eureka ...

    断路器hystrix实现.rar

    Hystrix是Netflix开源的一款强大的断路器库,它适用于Java环境,并且广泛应用于Spring Cloud框架中。本教程将深入探讨如何使用Hystrix在微服务中实现断路器功能。 首先,让我们理解断路器的工作原理。断路器在正常...

    SpringCloud中的断路器(Hystrix)和断路器监控(Dashboard)

    本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识,需要的朋友可以参考下

    springcloud hystrix 断路由

    在本文中,我们将深入探讨“Spring Cloud Hystrix 断路器”的概念及其在实际应用中的工作原理。 首先,我们来理解什么是断路器模式。断路器模式是软件设计模式的一种,用于在系统中引入故障保护机制。当服务出现...

    hystrix.zip

    3. `eureka-consumer-feign-hystrix`:这是一个服务消费者,它使用Feign客户端和Hystrix断路器来调用`eureka-producer`提供的服务。Feign是一个声明式Web服务客户端,使得编写Web服务客户端变得简单。而Hystrix则是...

Global site tag (gtag.js) - Google Analytics