Resilience4j輕量級(jí)的容錯(cuò)組件
Resilience4j 是一個(gè)輕量級(jí)的容錯(cuò)組件,其靈感來(lái)自于 Hystrix,但主要為 Java 8 和函數(shù)式編程所設(shè)計(jì)。輕量級(jí)體現(xiàn)在其只用 Vavr 庫(kù)(前身是 Javaslang),沒(méi)有任何外部依賴(lài)。而 Hystrix 依賴(lài)了 Archaius ,Archaius 本身又依賴(lài)很多第三方包,例如 Guava、Apache Commons Configuration 等。
限速組件架構(gòu):
Resilience4j 提供了如下幾款核心組件
resilience4j-circuitbreaker: Circuit breaking
resilience4j-ratelimiter: Rate limiting
resilience4j-bulkhead: Bulkheading
resilience4j-retry: Automatic retrying (sync and async)
resilience4j-cache: Response caching
附件組件包括:
resilience4j-reactor: Spring Reactor adapter
resilience4j-rxjava2: RxJava2 adapter
resilience4j-micrometer: Micrometer Metrics exporter
resilience4j-metrics: Dropwizard Metrics exporter
resilience4j-prometheus: Prometheus Metrics exporter
resilience4j-spring-boot: Spring Boot Starter
resilience4j-ratpack: Ratpack Starter
resilience4j-retrofit: Retrofit Call Adapter Factories
resilience4j-vertx: Vertx Future decorator
resilience4j-consumer: Circular Buffer Event consumer
使用示例:
使用 Resilience4j 實(shí)現(xiàn)請(qǐng)求調(diào)用頻率限制的示例代碼:
// Create a custom RateLimiter configuration
RateLimiterConfig config = RateLimiterConfig.custom()
.timeoutDuration(Duration.ofMillis(100))
.limitRefreshPeriod(Duration.ofSeconds(1))
.limitForPeriod(1)
.build();
// Create a RateLimiter
RateLimiter rateLimiter = RateLimiter.of("backendName", config);
// Decorate your call to BackendService.doSomething()
Supplier<String> restrictedSupplier = RateLimiter
.decorateSupplier(rateLimiter, backendService::doSomething);
// First call is successful
Try<String> firstTry = Try.ofSupplier(restrictedSupplier);
assertThat(firstTry.isSuccess()).isTrue();
// Second call fails, because the call was not permitted
Try<String> secondTry = Try.of(restrictedSupplier);
assertThat(secondTry.isFailure()).isTrue();
assertThat(secondTry.getCause()).isInstanceOf(RequestNotPermitted.class);