Hystrix

深入理解之Hystrix

Hystrix是 SpringCloud中的一个组件,它能起到了断路器的作用。

Hystrix的基本介绍

它解决了什么问题?

​ 当服务之间调用可能因为某个服务的堵塞或服务器问题使得其他需要消费该服务的其他服务请求处于等待,由于服务之间是相互调用的,会导致大量请求进程挂起进而导致整个系统CPU飙升进而崩溃的局面。

​ 而断路器是作用是做到 当一个服务单元发生故障,通过故障监控,向调用方返回一个错误响应,而不是长时间等待,使得线程不会因故障长时间不释放,避免故障在服务间蔓延。

 

hystrix基本配置

hystrix默认超时时间 2000毫秒

原生组件 Hystrix

<dependency>
  <groupId>com.netflix.hystrix</groupId>
  <artifactId>hystrix-core</artifactId>
  <version>1.5.8</version>
</dependency>

 

当然 SpringCloud 也集成了Hystrix

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

 

在服务消费者的主类OrderApplication上使用 @EnableCircuitBreaker注解开启断路器功能

@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
@ComponentScan(basePackages = "com.eiletxie")
public class OrderApplication {

   public static void main(String[] args) {
      SpringApplication.run(OrderApplication.class, args);
   }
}

 

其实可以直接使用 @SpringCloudApplication 注解来修饰主类,因为它包含上面的这3个注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {
}

 


设置函数降级策略

@HystrixCommand(fallbackMethod = “降级函数名”)

我们可以在 controller层或者service层对方法增加 @HystrixCommand 注解来指定回调方法,也就是常说的降级策略

@HystrixCommand(fallbackMethod = "fallback")
@GetMapping("/getProductInfoList")
public String getProductInfoList(@RequestParam("number") Integer number) {

   RestTemplate restTemplate = new RestTemplate();
   return restTemplate.postForObject("http://127.0.0.1:8005/product/listForOrder",
         Arrays.asList("157875196366160022"),
         String.class);
}

private String fallback() {
   return "太拥挤了, 请稍后再试~~";
}

 

服务熔断参数设置

当然你也可以对函数调用的具体相关参数做熔断的条件判断

Hystrix默认超时时间为2000毫秒

@HystrixCommand(commandProperties = {
      @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),              //设置熔断
      @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),    //请求数达到后才计算
      @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"), //休眠时间窗
      @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60"),  //错误率
})

转自http://www.eiletxie.cn/2020/03/09/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E4%B9%8BHystrix/

posted @ 2020-08-03 16:40  卯仙  阅读(193)  评论(0编辑  收藏  举报