SpringBoot3.4.3基于Resilience4j实现服务容错构建高可用系统
SpringBoot3.4.3基于Resilience4j实现服务容错构建高可用系统

本专栏前一篇文章SpringBoot3.4.3基于Openfeign实现声明式http接口调用。今天分享SpringBoot3.4.3基于Resilience4j实现服务容错功能,通过声明简单的注解即可处理SpringBoot3应用中服务延迟和容错问题。
完整代码在文章最后,如果觉得本篇文章对你有用,记得点赞、关注、收藏哦。你的支持是我持续更新的动力!
文章最后可以加入免费的Java&AI技术和支付系统沟通社群,一起探讨Java/你的产品如何与AI结合,请按照要求加入。在群中可以聊开发、系统设计、架构、行业趋势、AI等等话题
SpringBoot3专栏软件环境
- JDK17.0.12
- SpringBoot3.4.3
- IDEA2024.3.4
- resilience4j-spring-boot3 2.3.0
我们先看本篇文章对应的项目结构,请看下图

1 什么是Resilience4j
Resilience4j 是一个轻量级的容错库。它提供了一系列的容错机制,如熔断器、限流器、重试机制等,用于提高系统的可靠性和容错能力。以下是 Resilience4j 的一些主要特点和优势:
轻量级
Resilience4j 是一个轻量级的库,不需要额外的依赖,并且对应用程序的运行时性能影响非常小。
简单易用
Resilience4j 提供了简单易用的 API,使得开发者可以轻松地集成和使用容错机制。它支持函数式编程,使得代码更加简洁和可读。
高度可配置
Resilience4j 提供了高度可配置的选项,允许开发者根据具体需求调整容错策略。例如,可以配置熔断器的阈值、重试次数、超时时间等。
支持多种容错机制
Resilience4j 支持多种容错机制,包括熔断器、限流器、重试机制、隔离等。这些机制可以单独使用,也可以组合使用,以满足不同的容错需求。
健壮的容错策略
Resilience4j 提供了健壮的容错策略,如自动恢复、优雅降级等。这些策略可以帮助系统在出现故障时,仍然能够提供稳定的服务。
易于集成
Resilience4j 可以很容易地与 Spring Boot、Spring Cloud 等框架集成,使得开发者可以快速地实现容错功能。
Resilience4j 是一个功能强大、易于使用、高度可配置的容错库,可以帮助开发者构建更加健壮和可靠的系统。
2 项目搭建
今天一样会有两个项目,一个是客户端项目,另外一个为服务提供方。我们在客户端调用服务端接口时对Resilience4j组件进行应用,解决服务调用中的延迟和容错问题,提高系统的稳定性和可靠性
2.1 pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.itbeien</groupId>
<artifactId>springboot3-labs-master</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>springboot-resilience4j</artifactId>
<packaging>pom</packaging>
<modules>
<module>springboot-resilience4j-client</module>
<module>springboot-resilience4j-server</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<resilience4j-spring-boot3.version>2.3.0</resilience4j-spring-boot3.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot3</artifactId>
<version>${resilience4j-spring-boot3.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
</project>
2.2 配置信息
resilience4j.circuitbreaker.instances.myCircuitBreaker.slidingWindowSize=10
resilience4j.circuitbreaker.instances.myCircuitBreaker.minimumNumberOfCalls=5
resilience4j.circuitbreaker.instances.myCircuitBreaker.permittedNumberOfCallsInHalfOpenState=3
resilience4j.circuitbreaker.instances.myCircuitBreaker.waitDurationInOpenState=10s
resilience4j.circuitbreaker.instances.myCircuitBreaker.failureRateThreshold=50
resilience4j.circuitbreaker.instances.myCircuitBreaker.eventConsumerBufferSize=10
resilience4j.circuitbreaker.instances.myCircuitBreaker.recordExceptions[0]=java.lang.RuntimeException
2.3 客户端代码
客户端代码主要是对服务端功能调用,并在方法上添加熔断注解,当发生异常时调用指定回退方法
package cn.itbeien.resilience4j.client.controller;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
@RestController
@RequestMapping("/client")
@Slf4j
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getData")
@CircuitBreaker(name = "myCircuitBreaker", fallbackMethod = "fallback")
public String getData(@RequestParam("id") Integer id) {
// 记录日志,输出id
log.info("[getData][准备调用 Resilience4j-server 获取客户端传递的({})详情]", id);
// 使用RestTemplate发送HTTP GET请求,获取服务器返回的数据
return restTemplate.getForEntity("http://127.0.0.1:9090/api/get?id=" + id, String.class).getBody();
}
@GetMapping("/getList")
@CircuitBreaker(name = "myCircuitBreaker", fallbackMethod = "fallback")
public String getList(@RequestParam("ids") List<Integer> ids) {
// 记录日志,输出id
log.info("[getList][准备调用 Resilience4j-server 获取客户端传递的({})详情]", ids);
//使用RestTemplate发送HTTP GET请求,获取服务器返回的数据
return restTemplate.getForEntity("http://127.0.0.1:9090/api/getlist?ids=" + ids, String.class).getBody();
}
public String fallback(Integer id, Throwable throwable) {
// 记录日志,id和异常信息
log.info("[fallback][id({}) exception({})]", id, throwable.getMessage());
log.info("fallback mock server:{}",id);
// 返回fallback mock server加上id的字符串
return "fallback mock server:" + id;
}
}
3 单元测试
我们在不开启服务端应用时对客户端发送请求,请看下方日志,我们可以看到日志中已经进入到回退方法并按照回退方法执行相关逻辑

浏览器页面响应结果
以上就是今天SpringBoot3.4.3基于Resilience4j实现服务容错构建高可用系统全部内容,文章最后有源码下载地址
欢迎大家关注我的项目实战内容itbeien.cn,一起学习一起进步,在项目和业务中理解各种技术。

欢迎沟通交流技术和支付业务,一起探讨聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合聚合支付系统深入技术框架/微服务原理及分布式事务原理。加入我的知识星球吧

AI专栏
01IDEA&VsCode集成DeepSeek-V3 API提高编程效率
02IntelliJ IDEA集成主流 AI 编程助手及特性介绍
03Spring AI快速入门-基于DeepSeek&智谱实现聊天应用
04Spring AI中流式对话API如何使用-基于DeepSeek
06SpringAI实现角色扮演(自定义人设)和Prompts模板语法-基于DeepSeek
07LangChain4j实战-Java AI应用开源框架之LangChain4j和Spring AI
SpringBoot3专栏
01SpringBoot3专栏-SpringBoot3.4.0整合Mybatis-plus和Mybatis
02SpringBoot3.4.0结合Mybatis-plus实现动态数据源
03mapstruct对象映射在Springboot3中这样用就对了
04RocketMQ5.3.1集成SpringBoot3.4.0就这样简单
05SpringBoot3.4.0整合Redisson实现分布式锁
06MySQL增量数据同步利器Canal1.1.7环境搭建流程
07SpringBoot3.4.0集成Canal1.1.7实现MySQL实时同步数据到Redis
08基于Docker-SpringBoot3.4.0集成Apache Pulsar4.0.1实现消息发布和订阅
09SpringBoot3.4.0整合消息中间件Kafka和RabbitMQ
10SpringBoot3.4.0整合ActiveMQ6.1.4
11SpringBoot3整合Spring Security6.4.2 安全认证框架实现简单身份认证
12SpringBoot3.4.1和Spring Security6.4.2实现基于内存和MySQL的用户认证
13SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录
14SpringBoot3.4.1和Spring Security6.4.2结合JWT实现用户登录
16SpringBoot3.4.1基于MySQL8和Quartz实现定时任务管理
17SpringBoot3.4.2基于MyBatis和MySQL8多数据源使用示例
18SpringBoot3.4.3实现(文本/附件/HTML/图片)类型邮件发送案例
19SpringBoot3.4.3实现文件上传和全局异常处理
20SpringBoot3.4.3集成Knife4j实现接口文档管理和调试
21SpringBoot3.4.3基于Caffeine实现本地缓存
22SpringBoot3.4.3基于Spring WebFlux实现SSE功能
23SpringBoot3.4.3基于SpringDoc2和Swagger3实现项目接口文档管理
24SpringBoot3.4.3基于Openfeign实现声明式http接口调用
跟着我学微服务系列
01跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?
05SpringCloudAlibaba之图文搞懂微服务核心组件在企业级支付系统中的应用
06JDK17+SpringBoot3.4.0+Netty4.1.115搭建企业级支付系统POS网关
07JDK17+SpringCloud2023.0.3搭建企业级支付系统-预付卡支付交易微服务
08JDK17+Dubbo3.3.2搭建企业级支付系统-预付卡支付交易微服务
09JDK17+SpringBoot3.3.6+Netty4.1.115实现企业级支付系统POS网关签到功能
贝恩聊架构-项目实战地址
欢迎大家一起讨论学习,加我备注"Java/AI"拉你进入Java&AI技术讨论群,备注"聚合支付"拉你进入支付系统讨论群,在技术学习、成长、工作的路上不迷路!加我后不要急,每天下午6点左右通过!营销号免入

4 源码地址
贝恩聊架构-SpringBoot3专栏系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新
该仓库地址主要用于存放贝恩聊架构-SpringBoot3专栏、贝恩聊架构-AI专栏、基于企业级支付系统学习微服务整体技术栈所有资料和源码
