编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

轻量级的容错组件 Resilience4j(stratus容错服务器官网)

wxchong 2024-07-22 22:50:37 开源技术 9 ℃ 0 评论

Resilience4j 是一个轻量级的容错组件,其灵感来自于 Hystrix,但主要为 Java 8 和函数式编程所设计。轻量级体现在其只用 Vavr 库(前身是 Javaslang),没有任何外部依赖。而 Hystrix 依赖了 Archaius ,Archaius 本身又依赖很多第三方包,例如 Guava、Apache Commons Configuration 等。

限速组件架构:

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

使用示例:

  • CircuitBreaker, Retry and Fallback
  • RateLimiter
  • Bulkhead
  • Cache
  • Metrics
  • Consume emitted events

使用 Resilience4j 实现请求调用频率限制的示例代码:

// 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);

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表