Soul 学习笔记之 resilience4j 插件(十八)

总系列目录地址

resilience4j 插件配置

soul-bootstrap 确保resilience4j相关依赖已引入。

 <dependency>
     <groupId>org.dromara</groupId>
     <artifactId>soul-spring-boot-starter-plugin-resilience4j</artifactId>
     <version>${project.version}</version>
 </dependency>

启动 soul-examples-http

增加 selector 和 rule

rule 必须所有配置都填上,否则会报错,报错提示很不友好,完全不知道配置的哪个点出错。
在这里插入图片描述
在这里插入图片描述

插件工程soul-plugin-resilience4j

protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
     ...
     // 是否开启熔断
     if (resilience4JHandle.getCircuitEnable() == 1) {
         return combined(exchange, chain, rule);
     }
     return rateLimiter(exchange, chain, rule);
 }
 // 添加 resilience4j 的相关方法
 public class CombinedExecutor implements Executor {
	 @Override
	 public <T> Mono<T> run(...) {
	 	 // 通过配置创建限流器
	     RateLimiter rateLimiter = ...
	     // 通过配置创建熔断器
	     CircuitBreaker circuitBreaker = ...
	     Mono<T> to = run.transformDeferred(CircuitBreakerOperator.of(circuitBreaker))
	             .transformDeferred(RateLimiterOperator.of(rateLimiter))
	             .timeout(resilience4JConf.getTimeLimiterConfig().getTimeoutDuration())
	             .doOnError(TimeoutException.class, t -> circuitBreaker.onError(
	                     resilience4JConf.getTimeLimiterConfig().getTimeoutDuration().toMillis(),
	                     TimeUnit.MILLISECONDS,
	                     t));
		 ...
	     return to;
	 }
}

熔断使用接口 CircuitBreakerRegistry ,限流使用接口 RateLimiterRegistry。

了解一下 resilience4j

resilience4j 是轻量级熔断框架,来源于 Netflix Hystrix,没有很多依赖包,只使用了Vavr。
resilience4j 主要机制是状态机+环形缓存区,缓存区的数据使用bit来存储,非常节省空间。
通过环形缓存区,记录每次成功和失败次数,当访问次数填满环形缓存后开始计算失误率,熔断器状态修改为open/close。
在这里插入图片描述

熔断状态分为开启,关闭和半开放。开放状态全部拦截,关闭状态全部允许通过,半开放状态允许部分通过。

关于 Vavr

resilience4j 基于 Vavr, Vavr 简单地讲,就是函数式编程的一个库, 类似 Stream, 功能比 java stream 丰富,而且更简洁。

总结

soul 的 resilience4j 熔断器框架,通过 Resilience4JPlugin 注入到调用链中, 通过 Mono.transformDeferred 插入熔断器和限流器。
Resilience4j 是轻量级熔断框架,底层使用 Varv, 代码很少,以状态机的状态启停熔断器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值