服务降级原理解析

作为SpringCloud中的执法部门-六扇门,Hystrix监管着服务的一举一动,不管是超时还是异常抛出,但凡有违法乱纪的现象发生,就会被强制放到fallback里进行改造。可是,每个应用都有一长串的服务,那全部都交给Hystrix这能管得过来吗?

 

Hystrix可不是所有服务都监督,毕竟六扇门人力有限,他们只盯梢一些关键人物,给每个关键人物指派一个锦衣卫,但凡有异常发生,立即动手。接下来,我们就来看看六扇门的锦衣卫是如何秉公执法的。

盯梢名单 - @HystrixCommand

现在流行苍蝇老虎一起打,可我们六扇门不在乎小苍蝇,只盯大老虎。对那些一旦发生异常,影响特别恶劣,但是还有补救措施的,我们就安排一个锦衣卫贴身监视。

@HystrixCommand(fallbackMethod = "putInPrison")
public String bigTiger() {
	throw RuntimeException("Eat People");
}

上面就是我们的贴身锦衣卫@HystrixCommand注解,直接管在大老虎(具体Method方法)的头上,没有指派锦衣卫的方法就可以放飞自我了,Hystrix不会管你的。

@HystrixCommand注解中指定了一个fallbackMethod,这里就是大老虎进行改造的地方,也就是降级逻辑所在的方法名。注意,降级方法的方法签名(参数列表)要和原方法保持一致,也就是说,如果原方法声明了一个参数String,那么降级方法也要声明同样的参数,Hystrix会原封不动的把当前参数传递给降级方法。

当Hystrix和Feign共同使用的时候,还有一种配置方式,那就是在FeignClient注解中指定一个class,在这个class里可以处理Feign接口中声明的所有方法的降级需求。

@FeignClient(name = "feign-service-provider", fallback = Fallback.class)
public interface MyHelloService extends HelloService {
}

锦衣卫工作流程 - 异常捕捉

@HystrixCommand: 安插在方法上的锦衣卫,标识此方法由Hystrix监管

AspectJ:运用Spring的切面能力,给带有@HystrixCommand注解的方法配置了切面点,在方法调用的时候,将首先执行切面逻辑。大家可以借这个机会,顺带复习一下Spring的AOP切面编程(最好能够通过一个简单的小任务加深理解,比如自己定义一个注解,并且给这个注解配置切面完成一个简单逻辑,比如:将带有自定义注解的方法的执行时间打印到log中)

Request Cache:(下一节会讲到RequestCache策略)如果处于开启状态,则尝试用CacheKey从本地缓存中获取数据,也就不用发起方法调用了

如果处于关闭状态,就继续往下走到最烧脑的部分,Observer

注册Observer:Observer是观察者模式(在RxJava中又叫Observable),但这里只是一个幌子,这个Observer背后运用RxJava注册了一堆异步回调函数,当方法正常执行、异常抛出、结束或其他状态的时候,将会触发对应的回调函数进行处理,而且回调函数里面还会嵌套回调函数。(Hystrix开发团队是不是有个很怕失业的程序员?写这么复杂是要别人没法接手吗?)

发起调用:在发起调用之前,将会检查熔断状态,如果断路器当前处于开启的状态,那么将直接走向fallback流程。如果断路器处于关闭,则发起真正的调用

异常,又见异常:前面你来我往这么久,就是等方法调用抛异常。异常触发了步骤4中注册的回调函数,然后直接转给了降级方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值