SpringCloud之Hystrix

Posted Firm陈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud之Hystrix相关的知识,希望对你有一定的参考价值。

1.服务熔断与降级
在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务
故障,从而导致整个系统故障。这种现象被称为服务雪崩效应。
SpringCloud 中的 Hystrix 组件就可以解决此类问题,Hystrix 负责监控服务之间的调用情况,连续多次失败的
情况进行熔断保护。保护的方法就是使用 Fallback,当调用的服务出现故障时,就可以使用 Fallback 方法的
返回值;Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。

2.Hystrix简介
Hystrix:英 [hɪst’rɪks] 美 [hɪst’rɪks] ,翻译过来是“豪猪”的意思。 在分布式环境中,不可避免地会出现某些依赖的服务发生故障的情况。Hystrix是这样的一个库,它通过添加容许时延和容错逻辑来帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,阻止跨服务的级联故障,并提供了退路选项,所有这些都可以提高系统的整体弹性。
Hystrix 负责监控服务之间的调用情况,连续多次失败的情况进行熔断保护。保护的方法就是使用 Fallback,当调用的服务出现故障时,就可以使用 Fallback 方法的返回值;Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。

3.Hystrix的设计目的
(1)通过第三方客户端的库来为访问依赖服务时的潜在故障提供保护和控制;
(2)防止在复杂分布式系统中出现级联故障;
(3)快速失败和迅速恢复;
(4)在允许的情况下,提供退路对服务进行优雅降级;
(5)提供近实时的监控、报警和操作控制;

4.spring cloud 整合hystrix
(1)Maven依赖

<!--整合Hystrix  -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

(2)在启动类添加注解@EnableCircuitBreaker或@EnableHystrix,从而为项目启用断路器

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class SpringCloudClientDiscoveryApplication {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
         RestTemplate template = new RestTemplate();
            SimpleClientHttpRequestFactory factory = (SimpleClientHttpRequestFactory) template.getRequestFactory();
            factory.setConnectTimeout(3000);
            factory.setReadTimeout(3000);
            return template;
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudClientDiscoveryApplication.class, args);
    }
}

(3)修改调用服务的类,让其中的hi()方法具备容错能力

@HystrixCommand(fallbackMethod="hiFallBack")
@RequestMapping("/hi")
public String hi(){
return restTemplate.getForObject("http://eureka.client/person/get", String.class);
}
public String hiFallBack(){
    return "error";
}

(4)启动项目验证
地址:http://localhost:9090/hi
首先项目正常启动,查看调用结果
在这里插入图片描述

停掉服务提供者,查看调用结果
在这里插入图片描述

以上是关于SpringCloud之Hystrix的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud - Spring Cloud Netflix 之 Hystrix(配置),OpenFeign

springcloud费话之断路器(hystrix in feign)

重学SpringCloud系列七之服务熔断降级hystrix

5.springcloud微服务架构搭建 之 《springboot集成Hystrix》

SpringCloud之Hystrix

微服务架构整理-(十SpringCloud实战之Hystrix [3])