Resilience4j 用于 Java:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Resilience4j,为什么需要它?

\n\n

Resilience4j 是一个轻量级的 Java 库,旨在提高微服务和分布式系统的容错能力(resilience)。它提供了一组现成的组件,帮助保护您的应用程序免受级联故障、过载以及来自外部服务(数据库、API、消息队列等)的慢速响应。

\n\n

该库的主要任务是实现容错模式,例如 Circuit Breaker(自动断开有问题的服务)、Rate Limiter(限制请求频率)、Retry(重试)、Bulkhead(资源隔离)、Time Limiter(执行时间限制)和 Cache(结果缓存)。

\n\n

该库完美融入 Spring Boot 生态系统,但也可用于任何其他 Java 应用程序。Resilience4j 被认为是 Netflix 过时库 Hystrix 的现代替代品。

\n\n

安装(Maven/Gradle)

\n\n

Resilience4j 是一个 Java 库,因此通过 Maven 或 Gradle 构建系统安装。与 Python 不同,这里不使用 pip install 命令。

\n\n

Maven (pom.xml)

\n
<dependency>\n    <groupId>io.github.resilience4j</groupId>\n    <artifactId>resilience4j-all</artifactId>\n    <version>2.2.0</version>\n</dependency>\n\n<!-- 对于 Spring Boot 额外添加 -->\n<dependency>\n    <groupId>io.github.resilience4j</groupId>\n    <artifactId>resilience4j-spring-boot3</artifactId>\n    <version>2.2.0</version>\n</dependency>
\n\n

Gradle (build.gradle)

\n
implementation 'io.github.resilience4j:resilience4j-all:2.2.0'\nimplementation 'io.github.resilience4j:resilience4j-spring-boot3:2.2.0'
\n\n

快速入门及代码示例

\n\n

让我们创建一个简单的 Circuit Breaker 使用示例。假设我们有一个调用外部 API 的方法。我们希望如果 API 连续 5 次响应错误,那么后续调用立即返回 fallback 值,而不会给有问题的服务增加负载。

\n\n
import io.github.resilience4j.circuitbreaker.CircuitBreaker;\nimport io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;\nimport io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;\nimport java.time.Duration;\nimport java.util.function.Supplier;\n\npublic class QuickStartExample {\n\n    public static void main(String[] args) {\n        // 1. 创建 Circuit Breaker 配置\n        CircuitBreakerConfig config = CircuitBreakerConfig.custom()\n                .failureRateThreshold(50) // 错误阈值百分比\n                .waitDurationInOpenState(Duration.ofMillis(1000)) // 处于开启状态的时间\n                .slidingWindowSize(5) // 用于计算错误的滑动窗口大小\n                .build();\n\n        // 2. 创建注册表和 Circuit Breaker\n        CircuitBreakerRegistry registry = CircuitBreakerRegistry.of(config);\n        CircuitBreaker circuitBreaker = registry.circuitBreaker("myService");\n\n        // 3. 包装危险调用\n        Supplier<String> decoratedSupplier = CircuitBreaker\n                .decorateSupplier(circuitBreaker, QuickStartExample::riskyOperation);\n\n        // 4. 执行多次\n        for (int i = 0; i < 10; i++) {\n            try {\n                String result = decoratedSupplier.get();\n                System.out.println("成功: " + result);\n            } catch (Exception e) {\n                System.out.println("错误: " + e.getMessage());\n            }\n        }\n    }\n\n    // 模拟不可靠的外部服务\n    public static String riskyOperation() {\n        if (Math.random() > 0.3) {\n            throw new RuntimeE                    

推荐