springcloud中Hystrix的服务降级和服务熔断介绍和使用

什么是服务降级?

服务降级的概念主要适用于微服务和分布式项目,在高并发的情况下一个微服务因为某种原因无法提供服务,其他级联的微服务可能会出现线程阻塞的情况,从而出现拖垮整个服务的风险.所以根据项目具体的业务可以针对某些接口进行服务降级,也就是快速返回友好提示.

什么是服务熔断?

服务熔断通常都是和服服务降级一起配合使用,熔断机制目的为了保护服务,在高并发的情况下,如果请求达到一定极限(可以自己设置阔值)如果流量超出了设置阈值,让后直接拒绝访问,保护当前服务。使用服务降级方式返回一个友好提示\

使用Hystrix进行服务熔断和降级的步骤:

1. 引入Hystrix的maven依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-hystrix</artifactId>
   <version>1.4.4.RELEASE</version>
</dependency>

2. 启动类上加上@EnableCircuitBreaker注解或者是@SpringCloudApplication注解
@SpringCloudApplication注解包含了@EnableCircuitBreaker

3. 在需要使用断路器保护的核心接口加上@HystrixCommand注解

上图中@HystrixCommand是默认开启了服务降级和服务熔断以及线程隔离的.

下面针对上图中的注解的参数进行解释:

fallbackMethod: 表示服务降级的方法,value为方法名称,当该接口发生错误的情况,会调用fallbackMethod参数中的方法进行返回提示,需要注意的是该降级方法的形参必须和标示@HystrixCommand的接口参数一致

HystrixProperty: 该注解表示Hystrix的参数,Hystrix这个注解有非常多的功能,很多的配置都可以在HystrixProperty注解中配置,比如说上图的
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")  表示Hystrix的超时时间设置为3秒 默认为1秒
下面三个注解是和熔断器相关的
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10")  表示熔断器的以10个请求发一组作为样例
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000")  表示熔断器的熔断机制开启之后的恢复时间
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50")  表示熔断器10个请求样例达到百分之50以上的故故障率则开始熔断器

在这里我们对熔断机制做一下说明:

在Hystrix中熔断器默认是开启的,然后以20的请求作为参照样本,如果请求的故障率在50%以上则会开启熔断器来保护服务,当5秒钟过去之后熔断器会开始尝试将熔断器半开,放入一部分请求进入,如果请求正常执行则会管理熔断器,如果依然错误则从半开状态回到管理状态继续等待5秒钟时间,然后继续尝试.

总结:

我们通过加上上面的注解就可以实现,当借口发生异常或者远程RPC调用无法响应的时候,已极快的速度做出响应,防止线程阻塞.

我之前是做过一个小测试,使用订单服务调用会员服务,订单服务处于正常运行,会员服务关闭,然后使用jemter发送一百个请求,使用断路器的情况下处理100个请求的时间为2秒,不使用的情况下需要20秒.所以在微服务的项目中,使用Hystrix还是能够大大提高项目的稳定性的.

发布了60 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42214548/article/details/103109492
今日推荐