Resiliece4j是一个轻量级的容错组件,其灵感来自于Hystrix,但主要为Java8和函数式编程所设计。轻量级体现在其只用Vavr库(前身是Javaslag),没有任何外部依赖。而Hystrix依赖了Archaius,Archaius本身又依赖很多第三方包,例如Guava、ApacheCommosCofiguratio等。
限速组件架构:
Resiliece4j提供了如下几款核心组件
resiliece4j-circuitbreaker:Circuitbreakig
resiliece4j-ratelimiter:Ratelimitig
resiliece4j-bulkhead:Bulkheadig
resiliece4j-retry:Automaticretryig(sycadasyc)
resiliece4j-cache:Resposecachig
附件组件包括:
resiliece4j-reactor:SprigReactoradapter
resiliece4j-rxjava2:RxJava2adapter
resiliece4j-micrometer:MicrometerMetricsexporter
resiliece4j-metrics:DropwizardMetricsexporter
resiliece4j-prometheus:PrometheusMetricsexporter
resiliece4j-sprig-boot:SprigBootStarter
resiliece4j-ratpack:RatpackStarter
resiliece4j-retrofit:RetrofitCallAdapterFactories
resiliece4j-vertx:VertxFuturedecorator
resiliece4j-cosumer:CircularBufferEvetcosumer
使用示例:
CircuitBreaker,RetryadFallback
RateLimiter
Bulkhead
Cache
Metrics
Cosumeemittedevets
使用Resiliece4j实现请求调用频率限制的示例代码:
// Create a custom RateLimiter cofiguratioRateLimiterCofig cofig = RateLimiterCofig.custom() .timeoutDuratio(Duratio.ofMillis(100)) .limitRefreshPeriod(Duratio.ofSecods(1)) .limitForPeriod(1) .build();// Create a RateLimiterRateLimiter rateLimiter = RateLimiter.of("backedName", cofig);// Decorate your call to BackedService.doSomethig()Supplier<Strig> restrictedSupplier = RateLimiter .decorateSupplier(rateLimiter, backedService::doSomethig);// First call is successfulTry<Strig> firstTry = Try.ofSupplier(restrictedSupplier);assertThat(firstTry.isSuccess()).isTrue();// Secod call fails, because the call was ot permittedTry<Strig> secodTry = Try.of(restrictedSupplier);assertThat(secodTry.isFailure()).isTrue();assertThat(secodTry.getCause()).isIstaceOf(RequestNotPermitted.class);
评论