获取用户信息失败(获取用户信息失败是什么原因)
环境:SpringBoot2.3.12.RELEASE + Spring Cloud Hoxton.SR12
简介Spring Cloud 断路器提供了不同断路器实现之间的抽象。它提供了在应用程序中使用的一致API,让开发人员选择最适合应用程序需求的断路器实现。
Spring Cloud支持以下断路器实现:
Resilience4 *** entinelSpring Retry阻塞式应用要在代码中创建断路器,可以使用CircuitBreakerFactory API。当你在类路径中包含Spring Cloud Circuit Breaker starter时,将自动为你创建实现此API的bean。下面的例子展示了如何使用这个API的一个简单例子:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId></dependency>或者(反应式)<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId></dependency>
简单API应用
@Servicepublic static class UsersService { private RestTemplate rest; private CircuitBreakerFactory cbFactory; public DemoControllerService(RestTemplate rest, CircuitBreakerFactory cbFactory) { this.rest = rest; this.cbFactory = cbFactory; } public Users getUser { return cbFactory.create("remoteUser").run( -> rest.getForObject("/100", Users.class), throwable -> "用户用户信息失败"); }}
CircuitBreakerFactory.create API创建一个名为CircuitBreaker的类实例。run方法接受一个Supplier和一个Function。Supplier是你要包装在断路器中的代码。Function是在断路器跳闸时运行的后备功能。Function被传递导致触发回退的Throwable。如果你不想提供一个回退,你可以选择排除它。
反应式应用如果Project Reactor位于类路径上,你还可以为响应式代码使用ReactiveCircuitBreakerFactory。下面的例子展示了如何做到这一点:
@Servicepublic static class DemoControllerService { private ReactiveCircuitBreakerFactory cbFactory; private WebClient webClient; public DemoControllerService(WebClient webClient, ReactiveCircuitBreakerFactory cbFactory) { this.webClient = webClient; this.cbFactory = cbFactory; } public Mono<Users> getUser { return webClient.get .uri("/100").retrieve .bodyToMono(Users.class).tran *** orm( it -> cbFactory.create("remoteUser").run(it, throwable -> return Mono.just("获取用户失败"))); }}
ReactiveCircuitBreakerFactory.create API创建一个名为ReactiveCircuitBreaker的类实例。run方法将一个Mono或Flux包在一个断路器中。你可以选择配置一个回退函数,该函数将在断路器被触发并传递导致故障的Throwable时被调用。
配置你可以通过创建Customizer类型的bean来配置断路器。Customizer接口有一个方法(称为customize),它接受对象进行自定义。
有关如何自定义给定实现的详细信息,请参阅以下文档:
Resilience4J:
https://docs.spring.io/spring-cloud-commons/spring-cloud-circuitbreaker/current/reference/html/spring-cloud-circuitbreaker.html#configuring-resilience4j-circuit-breakers
Sentinel:
https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-docs/src/main/asciidoc/circuitbreaker-sentinel.adoc#circuit-breaker-spring-cloud-circuit-breaker-with-sentinel%E2%80%94%E2%80%8Bconfiguring-sentinel-circuit-breakers
Spring Retry:
https://docs.spring.io/spring-cloud-circuitbreaker/docs/current/reference/html/spring-cloud-circuitbreaker.html#configuring-spring-retry-circuit-breakers
一些 CircuitBreaker 实现,如Resilience4JCircuitBreaker,在每次调用CircuitBreaker#run时调用自定义方法。它可能是低效的。在这种情况下,你可以使用CircuitBreaker#once方法。
下面的例子展示了io.github.resilience4j.circuitbreaker.CircuitBreaker的方法。断路器消耗事件。
Customizer.once(circuitBreaker -> { circuitBreaker.getEventPublisher .onStateTransition(event -> log.info("{}: {}", event.getCircuitBreakerName , event.getStateTransition ));}, CircuitBreaker::getName)
完毕!!!
Spring Cloud Sentinel 熔断降级 Spring Cloud Sentinel 流控限流 Spring Cloud Sentinel 基础配置 Spring MVC 异步请求方式 Spring中字段格式化的使用详解 SpringBoot WebFlux整合Spring Security进行权限认证 Spring 自定义Advisor以编程的方式实现AOP Spring Security权限控制系列(七) Spring Security权限控制系列(一) Spring Security权限控制系列(五) Spring Security权限控制系列(六) Spring Security权限控制系列(二) Spring Security权限控制系列(三) Spring Security权限控制系列(四) Spring Cloud Function 快速入门
0 留言