resilience4j + cloud 示例

This commit is contained in:
YunaiV
2020-05-22 07:22:48 +08:00
parent 7a83a812b2
commit 3929648cf8
2 changed files with 45 additions and 7 deletions

View File

@@ -9,17 +9,55 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.Duration;
import java.util.function.Consumer;
import java.util.function.Function;
@Configuration
public class Resilience4jConfig {
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(
id -> new Resilience4JConfigBuilder(id)
.timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build())
.circuitBreakerConfig(CircuitBreakerConfig.custom().slidingWindow(5, 5, CircuitBreakerConfig.SlidingWindowType.COUNT_BASED).build())
.build());
public Customizer<Resilience4JCircuitBreakerFactory> resilience4JCircuitBreakerFactoryCustomizer() {
return new Customizer<Resilience4JCircuitBreakerFactory>() {
@Override
public void customize(Resilience4JCircuitBreakerFactory resilience4JCircuitBreakerFactory) {
// 设置默认的配置
resilience4JCircuitBreakerFactory.configureDefault(new Function<String, Resilience4JConfigBuilder.Resilience4JCircuitBreakerConfiguration>() {
@Override
public Resilience4JConfigBuilder.Resilience4JCircuitBreakerConfiguration apply(String id) {
// 创建 TimeLimiterConfig 对象
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.ofDefaults(); // 默认
// 创建 CircuitBreakerConfig 对象
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.ofDefaults(); // 默认
// 创建 Resilience4JCircuitBreakerConfiguration 对象
return new Resilience4JConfigBuilder(id)
.timeLimiterConfig(timeLimiterConfig)
.circuitBreakerConfig(circuitBreakerConfig)
.build();
}
});
// 设置编号为 "slow" 的自定义配置
resilience4JCircuitBreakerFactory.configure(new Consumer<Resilience4JConfigBuilder>() {
@Override
public void accept(Resilience4JConfigBuilder resilience4JConfigBuilder) {
// 创建 TimeLimiterConfig 对象
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)) // 自定义
.build();
// 创建 CircuitBreakerConfig 对象
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() // 自定义
.slidingWindow(5, 5, CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.build();
// 设置 Resilience4JCircuitBreakerConfiguration 对象
resilience4JConfigBuilder
.timeLimiterConfig(timeLimiterConfig)
.circuitBreakerConfig(circuitBreakerConfig);
}
}, "slow");
}
};
}
// @Bean

View File

@@ -27,7 +27,7 @@ public class DemoController {
@GetMapping("/get_user")
public String getUser(@RequestParam("id") Integer id) {
return circuitBreakerFactory.create("backendA").run(new Supplier<String>() {
return circuitBreakerFactory.create("slow").run(new Supplier<String>() {
@Override
public String get() {