Hystrix

15 阅读2分钟

Hytrix服务降级注释与方案

一、服务降级概述

向服务调用方返回一个符合预期的、可处理的预备响应(fallback),而不是长时间的等待或者抛出调用方无法处理的异常

二、注释

1、@HytrixCommand 可直接在方法体上注释,并设置属性name,设置该类的服务降级方法

2、@HystrixProperty 在@HytrixCommand 中设置,可设置方法调用超时时间

3、@DefaultProperties 设置全局的默认服务降级方法,需要在被处理方法加上注释@HytrixCommand

4、@EnableHystrix 开启Hystrix(启动类上)

三、服务降级方案

1、@HytrixCommand +@HystrixProperty,直接在类上注释并设置单独的处理方法;缺点:代码冗余程度高

2、@DefaultProperties+@HytrixCommand,@DefaultProperties直接设置全局的降级方法,在需要被处理的方法体上注释@HytrixCommand。缺点:与业务类代码糅合再一起

3、Feign+Hytrix 直接创建fallback类实现FeignClient接口。直接在调用服务提供者源头处理。

服务熔断

一、服务熔断概述

熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者等待时间长时,会进行服务降级。进而熔断该节点微服务的调用,快速返回响应,当检测到微服务正常响应后,恢复调用链路

二、熔断类型

a)熔断打开:请求不再调用当前服务,内部设置时钟一般为MTTR(平均故障处理时间),当打开时长达到所设时钟则进入半熔断状态

b)熔断关闭:熔断关闭,服务正常调用

c) 熔断半开:部分请求根据规则调用当前服务,如果请求成功且符合规则就认为当前服务恢复正常,关闭熔断

三、注释

 @HystrixCommand(fallbackMethod = "paymentCircuitFallback",commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"), //是否开启断路器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),//时间窗口期
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")//失败率达到多少后跳闸
    })
    public String paymentCircuitBreaker(@PathVariable("id") Integer id){
        if (id < 0){
            throw new RuntimeException("----id不能为负数----");
        }
        String simpleUUID = IdUtil.simpleUUID();
​
        return Thread.currentThread().getName()+"\t"+"调用成功,流水号:"+simpleUUID;
​
    }
​
    public String paymentCircuitFallback(@PathVariable("id") Integer id){
        return "id不能为负数,请稍后再试 id:"+id;
    }
​