Hystrix服务降级fallback实现

Hystrix服务降级fallback实现

花开堪折直需折,莫待无花空折枝

  • 我是一个菜菜鸟

Hystrix服务降级介绍:

  • 当某个服务接口出现异常情况时(超时、执行异常)——该接口不可用,此时需要及时进行异常情况的处理,避免出现级联故障导致服务雪崩的现象,需要使用一个备选方案来实现服务的及时响应;(就好比if else if…else中的else一层,有一个备用方案)

服务降级fallback实现:

  • 服务降级在服务端、客户端都可以,但一般放在客户端;如果客户端配置过feign,可在配置文件中加入(不过不在feign中开启也是没有问题的):

    feign:
      hystrix:
        enabled: true
    
  • 实现步骤:

    • 主启动类加上@EnableCircuitBreaker
    @SpringBootApplication
    @EnableEurekaClient
    @EnableCircuitBreaker//开启断路器
    public class PaymentHystrixMain8001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentHystrixMain8001.class,args);
        }
    }
     
    
    • 在Controller中使用@HystrixCommand配置服务降级,并使用fallbackMethod指定服务降级执行的方法,以及使用@HystrixProperty配置触发hystirx服务降级的条件;
    //配置fallback服务降级执行的方法,并配置默认等待时间为执行3秒以内,这里故意设置睡嘛五秒,触发服务降级
    //当该接口执行出现错误时,使用fallbackMethod中的方法来进行服务降级(即执行fallbackMethod中的方法)
    @HystrixCommand(fallbackMethod = "paymentInfoTimeOutHandler",commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
    })
    public String paymentInfoTimeOut(int id) {
        int timeOut=5;//设置睡眠时间为五秒,触发fallbackMethod服务降级
        try {
            TimeUnit.SECONDS.sleep(timeOut);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "线程池"+Thread.currentThread().getName()+" paymentInfo_TimeOut,id"+id+"\t"+"休眠"+timeOut+"秒钟";
    }
    public  String paymentInfoTimeOutHandler(int id){
        return "客户端接口超时或异常\t线程池:"+Thread.currentThread().getName();
    }
    
  • 服务降级fallback到这里简单配置实现就🆗了,接下来就是访问对应的接口就可以了,我这里是“http://localhost:85/consumer/payment/hystrix/fallback/2”:可以看到虽然上面睡眠了五秒钟,正常情况下将会返回一个超时异常,而这里由于配置hystrix的服务降级,在发生异常时不会返回一个错误页面而是自己设置的服务降级的方法的返回内容。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值