3.Hystrix

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能保证在一个服务出问题的情况下不会导致整体服务失败,避免级联故障,提高分布式系统的弹性。

服务降级(FallBack)

Hystrix可以实现服务降级和熔断。“断路器”相当于一个开关,当某个服务发生故障后,会像调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方法无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统中的蔓延乃至雪崩。

一般都在客户端处理降级,当然服务端也可以处理但是通常在客户端
1.feign开启降级

feign:
  hystrix:
    enabled: true

2.启动类添加注解
@EnableHystrix

3.在调用服务端接口的controller方法上添加降级注解

// fallbackMethod 是服务降级的方法,当发生降级就会调用该方法,注意该方法的参数需和本方法的参数一致
// 以下注解不只是超时会触发服务降级,当本方法发生运行时异常也会触发服务降级,如果想发生异常进行全局异常处理可以添加 ignoreExceptions = {Exception.class} 属性进行排除
@HystrixCommand(fallbackMethod = "timeOut_handler",commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1000")}
            )

以上name的值需要手写,也可以使用以下这个类

@HystrixCommand(fallbackMethod = "timeOut_handler",commandProperties = {
            @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS,value = "1000")}

4.在第3步只是针对一个方法做了服务降级,以下是全局降级

  • 4.1在controller上添加注解

    @DefaultProperties(defaultFallback = "default_hystrix",commandProperties = {
            @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS,value = "1500")})
    
  • 4.2在具体方法上添加注解
    @HystrixCommand,如果此时注解上加入了fallbackMethod 属性,那么以该注解为优先全局注解次之,如果没加表示该方法要走服务降级 使用的是全局的降级

5.业务逻辑和服务降级进行解耦。当在调用过程中服务方突然宕机,如果是使用的fegin可以使用@FeignClient中的fallback进行降级

  • 5.1添加fallback要指定的降级类,实现调用接口类,重写要调用的方法,然后@FeignClient 添加 fallback

    
    /**
    * 调用第三方的接口类
    */
    @Component
    @FeignClient(value = "cloud-payment-hystrix-service",fallback = PaymentHystrixService.class)
    public interface PaymentHystrixService {
    
        @GetMapping("payment/hystrix/ok/{id}")
        public String ok(@PathVariable("id") Integer id);
    
        @GetMapping("payment/hystrix/timeOut/{id}")
        public String timeOut(@PathVariable("id") Integer id);
    }
    
    /**
    * 调用第三方的接口类的降级类
    */
    @Component
    public class PaymentFallbackService implements PaymentHystrixService{
        @Override
        public String ok(Integer id) {
            return "调用方宕机";
        }
    
        @Override
        public String timeOut(Integer id) {
            return "调用方宕机";
        }
    }
    

服务熔断(break)

相当于生活中的保险丝,当访问量达到最大量后,将拒绝访问,然后调用服务降级的方法返回友好提示。
熔断机制是应对雪崩效应的一种微服务链路保护机制。当调用的链路的某个微服务出错不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到节点微服务调用响应正常后,恢复调用链路

@HystrixCommand(fallbackMethod = "breaker_handler",commandProperties = {
            @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ENABLED,value = "true"),
            @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD,value = "10"),
            @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS,value = "10000"),
            @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE,value = "60")
    })

1.断路器开关
2.请求总数
3.时间范围
4.错误百分比

在规定时间内请求总数达到峰值且达到错误百分比就会打开断路器。如果达不到峰值哪怕请求全部发生异常也不会打开断路器。当打开断路器后,就会进入fallbackMethod 指定的方法,断路器是打开状态所有请求都不会进行正常转发。一段时间之后(默认是5秒),这个时候断路器进入半开状态,会让一个请求进行转发,如果这个请求转发成功,会关闭断路器,之后恢复正常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值