Circuit Breaker 即断路器,在微服务架构中非常有用。
它可以很好地解决这样一个问题:在众多的微服务集群中,服务之间会反复地调用,发送请求,获取响应。有时候最初的一次请求调用,会触发牵连到更多请求调用,比如说这个关联的复杂度达到了10级,那么这10个关联请求中,只要有一个发生了错误,比如说其中的一台被调用的服务器挂了,如果事先对这种错误机制没有处理的话,将会引起雪崩效应,可能造成整个服务器集群崩溃。造成的 结构将是灾难性的。
Circuit Breaker断路器就很好地解决了这种棘手问题,它会智能地处理(当然需要我们设置一些有效的回滚策略)一个请求调用另一个请求出错,而不能正常返回结果的情况。
spring cloud常用的断路器有:
Resilience4J, Sentinel, or Hystrix等;
本文以Resilience4J为例,官网介绍它非常地轻量级。。
首先,确认一点,断路器是设置在client端,即请求发出的地方,这一点应该很容易理解,只有在请求发出的地方才能进行容错处理,如果设在server端,server都挂了,还容错个P呀。。
其次,引入spring对Resilience4J的支持;
以maven管理为例,在pom.xml文件中添加如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
</dependency>
注意,需要指定cloud依赖的版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.3-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
最后,是创建ReactiveCircuitBreakerFactory,并使用:
spring提供的类似于断路器功能的模块包,确实挺实用的,也非常方便。
后面对断路器的配置规则研究清楚了,会继续更新……
欢迎关注我,一起交流学习新的软件技术👇👇👇👇👇👇