9.2.1 使用 Spring Cloud Circuit Breaker 介绍断路器
要在 Spring Cloud Gateway 中使用 Spring Cloud Circuit Breaker,你需要添加所需实现的依赖。在本例中,我们将使用 Resilience4J 响应式版本。继续在 Edge Service 项目(edge-service)的 build.gradle 文件中添加新依赖。记住在添加后刷新或重新导入 Gradle 依赖。
代码清单 9.6 添加 Spring Cloud Circuit Breaker 依赖
dependencies {
// ... 其他依赖
implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j'
}
Spring Cloud Gateway 中的 CircuitBreaker 过滤器依赖 Spring Cloud Circuit Breaker 来包装路由。与 Retry 过滤器一样,你可以选择将其应用于特定路由或定义为默认过滤器。让我们选择第一个选项。你还可以指定一个可选的 fallback URI,在电路处于打开状态时处理请求。在这个示例(application.yml)中,两个路由都将配置 CircuitBreaker 过滤器,但只有 catalog-route 会有 fallbackUri 值,这样我可以向你展示两种场景。
代码清单 9.7 为网关路由配置断路器
spring:
cloud:
gateway:
routes:
- id: catalog-route
uri: ${CATALOG_SERVICE_URL:http://localhost:9001}/books
predicates:
- Path=/books/**
filters:
- name: CircuitBreaker # 过滤器名称
args:
name: catalogCircuitBreaker # 断路器名称
fallbackUri: forward:/catalog-fallback # 电路打开时转发到此 URI
- id: order-route
uri: ${ORDER_SERVICE_URL:http://localhost:9002}/orders
predicates:
- Path=/orders/**
filters:
- name: CircuitBreaker
args:
name: orderCircuitBreaker # 此断路器未定义回退
下一步是配置断路器。