一、前言
Resilience4j是一款轻量级,易于使用的容错库,其灵感来自于Netflix Hystrix,但是专为Java 8和函数式编程而设计。轻量级,因为库只使用了Vavr,它没有任何其他外部依赖下。相比之下,Netflix Hystrix对Archaius具有编译依赖性,Archaius具有更多的外部库依赖性。
Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计。
Resilience4j提供高阶函数(decorators)来增强任何功能接口、lambda表达式或方法引用,包括断路器、速率限制器、重试或舱壁。可以在任何函数接口、lambda表达式或方法引用上使用多个装饰器。
circuitbreaker组件实现了断路器功能,是基于内存的断路器,采用ConcurrentHashMap来实现。
功能特性:
- 断路器(Circuit Breaker):在服务出现故障时自动熔断,防止请求继续失败导致雪崩效应。
- 限流(Rate Limiter):限制请求的并发数或速率,防止系统被过载。
- 重试(Retry):在请求失败时自动重试一定次数,增加系统的可靠性。
- 超时(Timeout):设置请求的最大执行时间,防止请求长时间阻塞。
- Bulkhead:通过限制同时执行的请求数量,保护系统的部分资源不被耗尽。
二、代码工程
1.引入依赖
2.相关配置文件
3.限流控制层
4.重试控制层
5.隔离控制层
三、测试
启动程序进行项目测试。
1.测试限流
执行程序,我们发现前5个请求都执行成功了,但是后面的一个请求由于限流的限制,提示请求失败!
2.测试重试
访问http://localhost:8080/retry?name=test
发现请求重试了3次
3.测试隔离