服务治理-Resilience4j(熔断)

  

Hystrix官方已停止维护,官方推荐使用Resilience4j来替代Hystrix实现服务治理,今天我们看看如何使用Resilience4j。

  

介绍

  

1,一款受Hystrix启发的轻量量级且易于使用的容错库
2,针对Java 8与函数式编程设计
3, github地址:https://github.com/resilience4j/resilience4j
4核心组件:
服务治理-Resilience4j(熔断)

  

如何基于Resilience4j实现断路器

  

断路器

  

1, Resilience4j的断路器组件实现了断路器功能,他是基于内存的断路器,采用
ConcurrentHashMap来实现的。

  

2,断路器的功能主要是处理熔断,当客户端调用服务端出现问题时进行拦截,直接返回,不再发送请求给服务端,减少下游服务的冲击。

  

实验环境

  

1,基于尤里卡的服务注册和发现
2,提供服务的服务员的服务
3,客户端调用客服

  

关键代码

  

1,启动服务员的服务和客服服务,分别注册到尤里卡,这里不再介绍,可以参考之前的博客。

  

2,服务员的服务作为服务提供方,不涉及到配置代码

  

3,关键代码在客户端客服

  

3.1,断路器的配置:application.properties
规则取名为顺序

  
 <代码> resilience4j.circuitbreaker.backends.order.failure-rate-threshold=50
  resilience4j.circuitbreaker.backends.order.wait-duration-in-open-state=5000
  resilience4j.circuitbreaker.backends.order.ring-buffer-size-in-closed-state=5
  resilience4j.circuitbreaker.backends.order.ring-buffer-size-in-half-open-state=3
  resilience4j.circuitbreaker.backends.order.event-consumer-buffer-size=10  
  

3.2,使用注解的方式实现断路器

  
 <代码> @GetMapping (“/getCoffee1”)
  @io.github.resilience4j.circuitbreaker.annotation。断路器(name="秩序")
  公众咖啡getCoffee1 () {
  咖啡=coffeeService.getById列表(1升);
  log.info(“读咖啡:{}咖啡”,列表);
  返回列表;
  } 
  

3.3,使用注册方式,实现断路器,短路之后默认返回空的列表

  
 <代码>私人断路器断路器;
  公共CustomerController (CircuitBreakerRegistry registry) {
  断路器=registry.circuitBreaker(“订单”);
  }
  @GetMapping ("/getCoffee2”)
  公共ListgetCoffee2 () {
  返回Try.ofSupplier (
  CircuitBreaker.decorateSupplier(断路器,
  ()→coffeeService.getAll ()))
  .recover (CircuitBreakerOpenException。类,Collections.emptyList ())
  . get ();
  } 
  

3.4,关闭服务员的服务,模拟服务宕机,展示效果

  

连续请求3次,服务调用失败
服务治理-Resilience4j(熔断)

  

失败超过50%,第4次触发短路器打开:
服务治理-Resilience4j(熔断)

  

等待5秒钟,断路器尝试重连:
服务治理-Resilience4j(熔断)

服务治理-Resilience4j(熔断)