SpringCloud微服务组件——Hystrix快速入门

本文详细介绍了Hystrix断路器的工作原理及其在解决服务雪崩问题中的作用。通过降级机制、隔离策略和熔断机制,Hystrix能够有效保护系统免受异常服务的影响,确保系统的稳定性和可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hystrix

Hystrix的作用

Hystrix主要是为了解决服务雪崩问题
降级机制:当你的某一服务器出现超时,资源不足,出现了异常时,可以执行一个降级方法,返回一个托底数据。
隔离:两种方式:提供了一个Hystrix线程池,信号量管理Tomcat的线程池。为了防止Tomcat线程池线程耗尽
熔断:当你的某一个服务的请求达到阈值(10s内的20个请求失败率达到50%,一个条件失败都不会触发)时,自动触发降级。

实现降级机制

导入依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

启动类添加注解(@EnableCircuitBreaker)
在要实现降级的方法上添加注解(@HystrixCommand(fallbackMethod = “findByIdFallBack降级方法的名称”))

实现隔离

使用Tomcat线程去接收用户的请求,使用当前线程去执行其他服务的功能,如果某个服务出现故障,Tomcat的大量线程就会堆积,导致Tomcat无法处理其他业务功能

  • Hystrix(默认):接收用户请求采用tomcat的线程池,执行业务代码,调用其他服务时,使用Hystrix的线程池。
  • 信号量:信号量相当于交警,使用的还是Tomcat线程池,他只是去帮助我们管理Tomcat的线程池,防止Tomcat线程池耗尽

Hystrix的线程池配置

  • execution.isolation.strateg:线程隔离策略—THREAD
  • execution.isolation.thread.timeoutInMilliseconds:指定超时时间——1000
  • execution.timeout.enabled:是否开启超时时间配置——true
  • execution.isolation.thread.interruptOnTimeout:超时之后是否中断线程——true
  • execution.isolation.thread.interruptOnCancel:取消任务后知否——false

Hystrix代码实现

@HystrixCommand(fallbackMethod = "findByIdFallBack",commandProperties = {
                @HystrixProperty(name = "execution.isolation.strategy",value = "THREAD"),
                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
})

信号量的配置信息

  • execution.isolation.strateg:线程隔离策略——SEMAPHORE
  • execution.isolation.semaphore.maxConcurrentRequests:指定信号量的最大并发请求数——10(1个测试并发是2500)

信号量的代码实现

@HystrixCommand(fallbackMethod = "findByIdFallBack",commandProperties = {
                @HystrixProperty(name = "execution.isolation.strategy",value = "SEMAPHORE")
})
断路器

在调用指定服务时,如果说这个服务的失败率达到你输入的一个阈值,将断路器从closed状态,转变为open状态,指定服务时无法被访问的,如果你访问就直接走fallback方法,在一定的时间内,open状态会再次转变为half open状态,允许一个请求发送到我的指定服务,如果成功,转变为closed,如果失败,服务再次转变为open状态,会再次循环到half open,直到断路器回到一个closed状态。

配置断路器的监控界面

导入依赖

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
       </dependency>

在启动类中添加注解(@EnableHystrixDashboard)
配置一个Servlet路径,指定上Hystrix的Servlet,方法继承HystrixMetricsStreamServlet

@WebServlet("/hystrix.stream")
public class HystrixServlet extends HystrixMetricsStreamServlet {
}

在启动类上,添加扫描Servlet的注解(@ServletComponentScan(“com.qf.servlet”))
测试直接访问http://host:port/hystrix
输入映射好的servlet路径(Ps:Ps:启动成功后,需要访问一个controller接口查看信息)

配置断路器的属性(默认10s秒中之内请求数)
circuitBreaker.enabled:断路器的开关——true
circuitBreaker.requestVolumeThreshold:失败阈值的总请求数——20
circuitBreaker.errorThresholdPercentage:请求总数失败率达到%多少时——50
circuitBreaker.sleepWindowInMilliseconds:断路器open状态后,多少秒是拒绝请求的——5000
circuitBreaker.forceOpen:强制让服务拒绝请求——false
circuitBreaker.forceClosed:强制让服务接收请求——false
代码实现配置

@HystrixCommand(fallbackMethod = "findByIdFallBack",commandProperties = {
   				@HystrixProperty(name = "circuitBreaker.enabled",value = "true"),
 			    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),
   				@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "70"),
  			    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "5000")
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值