springcloud demo---hystrix

Posted rainsakura

tags:

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

1.概念

hystrix是Netflix公司实现的一个熔断库,spring 把它集成到spring cloud微服务解决方案中。当级联请求中的某个服务出现故障(如:阻塞)时可以自动切断当前服务,暂停对外提供服务。当服务恢复正常时,自动放开当前服务。

2.原理

当调用一个特定服务,默认10(circuitBreaker.requestVolumeThreshold)秒内,此服务被调用超过20次(circuitBreaker.requestVolumeThreshold),并且错误率超过50%(circuitBreaker.errorThresholdPercentage),那么断路器就打开,阻止此服务对外提供服务,禁止外部调用,此时如果开发者提供了其它回调方法,可以调用备用的回调方法,以替代原服务。断路器保持打开状态一段时间(默认5秒),然后切换到半打开状态(HALF-OPEN),即先放进来一个请求,检查此次请求是否成功,如果本次请求仍然失败,说明服务没有恢复,断路器继续保持开路状态(OPEN)。如果本次请求成功,说明服务已恢复,则关闭断路器,把服务重新加入到整个服务链中。

3.fallback

hystrix的断路机制,可以直接阻制新请求,也可以提供一种备选方案,即:如果断路原请求时,可以调用开发者提供的备用回调方法,以返回其它替代数据(如:表态数据,或其它失败信息),相当于降级处理。

4.feign-client

  4.1 配置文件(和client配置类似):与负载均衡ribbon/feign一起使用

  4.2 依赖:spring-cloud-starter-netflix-hystrix

  4.3 注解:@EnableCircuitBreaker //开启断路器

  4.4 ribbon熔断

    与ribbon集成时注意事项当使用 Hystrix commands 封装 Ribbon clients 时,要确认Hystrix的超时配置一定必须Ribbon的超时长,以及可能潜在的重复次数。

    例如: 如果Ribbon的超时时间是1秒,并且 Ribbon的重试次数是3次,那么Hystrix的超时时间至少是3秒。

@HystrixCommand(fallbackMethod = "helloFallback"){ribbon例子}:
                    @HystrixCommand(fallbackMethod = "helloFallback")
                    public String port(){
                        return restTemplate.getForObject("http://PROVIDER/test", String.class);
                    }

                    public String helloFallback() {
                        return "error";
                    }

  4.5 feign熔断

    feign如何集成hystrix:hystrix对应的类位于classpath以及feign.hystrix.enabled=true,feign会自动把使用@FeignClienti注解的类中所有方法都封装成

    具有hystrix功能的bean.由于@FeignClient自动集成hystrix,所以通过@FeignClient的属性来配置故障回调类

@RestController
public class TestController {

    @Autowired
    TestService testService;

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String helloConsumer() {
        //调用了绑定PROVIDER服务接口的客户端向服务发起/test接口的调用
        return testService.test();
    }

}

@FeignClient(name = "PROVIDER",fallback = FallbackTest.class)
public interface TestService {

    //绑定具体服务的REST接口
    @RequestMapping("/test")
    String test();
}

//从@HystrixCommand(fallbackMethod)中的回调方法转换成回调类
@Component
public class FallbackTest implements TestService{
    @Override
    public String test() {
        return "fallback";
    }
}

 


以上是关于springcloud demo---hystrix的主要内容,如果未能解决你的问题,请参考以下文章

springcloud01-SpringCloud 概述

SpringCloud系列SpringCloud概述及微服务技术栈的使用

springcloud2020版本使用zuul和nacos服务发现

springcloud情操陶冶-初识springcloud

SpringCloud学习系列-SpringCloud

springcloud nacos 跨服务调用失败