【你好Resilience4j】一:Resilience4j之初体验

每日一句

健身和读书,是世界上成本最低的升值方式;而懒,是你通往牛逼的路上最大的敌人。

为什么要使用Resilience4j

看到我们这部分文章的同学肯定是对Netflix Hystrix 有一定了解的。Netflix Hystrix 作为SpringCloud最早支持的一种容错解决方案,已经进入了维护阶段。虽然目前还有大量应用在使用Hystrix 长远来看Hystrix退出历史舞台 仅仅是时间问题。并且SpringCloud和Netflix Hystrix都给出了替代方案 那就是Resilience4j。所以学习Resilience4j很有必要,并且它也很值得你学。因为笔者认为它的代码简洁 大量使用了函数式编程,可以说源码质量也是比较高的,对于想学习并想深入学习Java函数式编程的同学是一个很好的机会。

Resilience4j介绍

Resilience4j是受
Netflix Hystrix启发的轻量级,易于使用的容错库,但专为Java 8和函数式编程而设计。轻巧,因为该库仅使用Vavr,而Vavr没有任何其他外部库依赖项。相比之下,Netflix Hystrix对Archaius具有编译依赖性,而Archaius具有更多的外部库依赖性,例如Guava和Apache Commons Configuration。

Resilience4j提供了高阶函数(装饰器),以使用断路器,速率限制器,重试或隔板来增强任何功能接口,lambda表达式或方法引用。您可以在任何功能接口,lambda表达式或方法引用上堆叠多个装饰器。优点是您可以选择所需的装饰器,而不必选择其他任何东西。

Resilience4j 梓2016年发布第一个版本之后到现在最新版本V1.6.1。该系列文章选用的版本是1.6.1版本。

Resilience4j模块

核心模块
resilience4j-circuitbreaker:电路断开
resilience4j-ratelimiter:速率限制
resilience4j-bulkhead:隔板
resilience4j-retry:自动重试(同步和异步)
resilience4j-cache:结果缓存
resilience4j-timelimiter:超时处理
附加模块
resilience4j-retrofit:对retrofit的支持
resilience4j-feign:对feign的支持
resilience4j-consumer:对consumer的支持
resilience4j-kotlin:Kotlin支持
框架模块
resilience4j-spring-boot:spring boot1.x支持
resilience4j-spring-boot2:Spring Boot 2.x支持

模块太多 我就不一一列举了。我们只关心核心模块就好了。

初体验

下面是Resilience4j官网的一个例子。

CircuitBreaker circuitBreaker = CircuitBreaker
  .ofDefaults("backendService");
Retry retry = Retry
  .ofDefaults("backendService");
Bulkhead bulkhead = Bulkhead
  .ofDefaults("backendService");

Supplier<String> supplier = () -> backendService
  .doSomething(param1, param2)
Supplier<String> decoratedSupplier = Decorators.ofSupplier(supplier)
  .withCircuitBreaker(circuitBreaker)
  .withBulkhead(bulkhead)
  .withRetry(retry)  
  .decorate();
String result = Try.ofSupplier(decoratedSupplier)
  .recover(throwable -> "Hello from Recovery").get();
String result = circuitBreaker
  .executeSupplier(backendService::doSomething);
 ThreadPoolBulkhead threadPoolBulkhead = ThreadPoolBulkhead
  .ofDefaults("backendService");
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
TimeLimiter timeLimiter = TimeLimiter.of(Duration.ofSeconds(1));

CompletableFuture<String> future = Decorators.ofSupplier(supplier)
    .withThreadPoolBulkhead(threadPoolBulkhead)
    .withTimeLimiter(timeLimiter, scheduledExecutorService)
    .withCircuitBreaker(circuitBreaker)
    .withFallback(asList(TimeoutException.class, 
                         CallNotPermittedException.class, 
                         BulkheadFullException.class),  
                  throwable -> "Hello from Recovery")
    .get().toCompletableFuture();

看看就好了 ,我现在解释也没有太大的必要。反正知道 它能干这些事 代码能这样写就好了。

作者寄语

Resilience4j代码写的很优雅简洁,当然注释也简洁, 这会给我们阅读源码造成很大的困扰。当然除此之外 它完全基于java8之上构建的 使用的语法全部都是 函数式语法。甚至java8的函数式语法都不能满足它,它还需要借助Vavr来完成更复杂的函数编程。所以学习Resilience4j还是需要一些函数式编程功底的。如果没有这方面经验的同学可以先了解了解。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值