在我们分布式系统中, 经常会用用到 Hystrix 、Resilience4j 等主流服务熔断器,平时使用得非常熟悉,但是否有想过,自己手动实现一个,熔断器呢 ?今天我们就以前来基于Spring AOP实现一个服务熔断器。
注意:下面的例子我在本地启用了一个 consul 的注册中心,用于注册生产者及消费者
一、熔断器概念
- 在断路器对象中封装受保护的⽅法调⽤;
- 该对象监控调⽤和断路情况;
- 调⽤失败触发阈值后,后续调⽤直接由断路器返回错误,不再执⾏实际调⽤;
下图为熔断器的工作原理图:
二、服务提供方
2.1 pom主要依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
&l