当前位置: 首页 > news >正文

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言

在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。

这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示;

2.配置

spring:application.name: resilience4j-demojackson.serialization.indent_output: true # 格式化输出jsonserver:port: 9080management.endpoints.web.exposure.include: '*' # 暴露所有端点
management.endpoint.health.show-details: always # 显示详细健康信息management.health.diskspace.enabled: false # 关闭磁盘空间健康检查
management.health.db.enabled: false # 关闭数据库健康检查
management.health.circuitbreakers.enabled: true #  开启断路器健康检查
management.health.conditions.enabled: false # 关闭条件健康检查
management.health.ratelimiters.enabled: false # 关闭限流器健康检查info:name: ${spring.application.name}description: resilience4j demoenvironment: ${spring.profiles.active}version: 0.0.1management.metrics.tags.application: ${spring.application.name} # 添加自定义标签
management.metrics.distribution.percentiles-histogram.http.server.requests: true # 开启http请求统计
management.metrics.distribution.percentiles-histogram.resilience4j.circuitbreaker.calls: true # 开启断路器统计#resilience4j.circuitbreaker.metrics.use_legacy_binder: true # 使用旧版绑定器resilience4j.circuitbreaker: # 断路器配置configs:default:registerHealthIndicator: true # 开启健康检查slidingWindowSize: 10 # 滑动窗口大小minimumNumberOfCalls: 5 # 最小调用次数permittedNumberOfCallsInHalfOpenState: 3 # 半开状态最大调用次数automaticTransitionFromOpenToHalfOpenEnabled: true # 自动切换到半开状态waitDurationInOpenState: 5s # 半开状态等待时间failureRateThreshold: 50 # 失败率阈值eventConsumerBufferSize: 10 # 事件消费者缓冲区大小recordExceptions: # 记录异常- org.springframework.web.client.HttpServerErrorException # http服务端错误- java.util.concurrent.TimeoutException # 超时异常- java.io.IOException # IO异常ignoreExceptions: # 忽略异常- io.github.robwin.exception.BusinessException # 业务异常shared: # 共享配置slidingWindowSize: 100 # 滑动窗口大小permittedNumberOfCallsInHalfOpenState: 30 # 半开状态最大调用次数waitDurationInOpenState: 1s # 半开状态等待时间failureRateThreshold: 50 # 失败率阈值eventConsumerBufferSize: 10 # 事件消费者缓冲区大小ignoreExceptions: # 忽略异常- io.github.robwin.exception.BusinessException # 业务异常instances: # 实例配置backendA: # 配置 backendA 实例baseConfig: default # 使用 default 配置backendB: # 配置 backendB 实例registerHealthIndicator: true # 开启健康检查slidingWindowSize: 10 # 滑动窗口大小minimumNumberOfCalls: 10 # 最小调用次数permittedNumberOfCallsInHalfOpenState: 3 # 半开状态最大调用次数waitDurationInOpenState: 5s # 半开状态等待时间failureRateThreshold: 50 # 失败率阈值eventConsumerBufferSize: 10 # 事件消费者缓冲区大小recordFailurePredicate: io.github.robwin.exception.RecordFailurePredicate # 记录异常
resilience4j.retry: # 重试配置configs:default:maxAttempts: 3 # 最大重试次数waitDuration: 100 # 重试间隔时间 (ms)retryExceptions: # 记录异常- org.springframework.web.client.HttpServerErrorException # http服务端错误- java.util.concurrent.TimeoutException # 超时异常- java.io.IOException # IO异常ignoreExceptions: # 忽略异常- io.github.robwin.exception.BusinessException # 业务异常instances:backendA: # 配置 backendA 实例baseConfig: default # 使用 default 配置backendB: # 配置 backendB 实例baseConfig: default # 使用 default 配置
resilience4j.bulkhead: # 舱壁 批量请求配置configs:default:maxConcurrentCalls: 100 # 最大并发调用数instances:backendA: # 配置 backendA 实例maxConcurrentCalls: 10 # 最大并发调用数backendB:maxWaitDuration: 10ms # 最大等待时间maxConcurrentCalls: 20 # 最大并发调用数resilience4j.thread-pool-bulkhead: # 线程池舱壁 批量请求配置configs:default:maxThreadPoolSize: 4 # 最大线程池大小coreThreadPoolSize: 2 # 核心线程池大小queueCapacity: 2 # 队列容量instances:backendA:baseConfig: default # 使用 default 配置backendB:maxThreadPoolSize: 1 # 覆盖默认配置,最大线程池大小coreThreadPoolSize: 1 # 覆盖默认配置,核心线程池大小queueCapacity: 1 # 覆盖默认配置,队列容量resilience4j.ratelimiter: # 限流器配置configs:default:registerHealthIndicator: false # 关闭健康检查limitForPeriod: 10 # 每个周期内的请求限制数limitRefreshPeriod: 1s # 周期刷新时间,即每秒刷新一次timeoutDuration: 0 # 请求超时时间,0表示不超时eventConsumerBufferSize: 100 # 事件消费者缓冲区大小instances:backendA:baseConfig: default # 使用默认配置backendB:limitForPeriod: 6 # 每个周期内的请求限制数limitRefreshPeriod: 500ms # 周期刷新时间,即每500毫秒刷新一次timeoutDuration: 3s # 请求超时时间,3秒resilience4j.timelimiter: # 限时器配置configs:default:cancelRunningFuture: false # 是否取消正在运行的FuturetimeoutDuration: 2s # 超时时间,2秒instances:backendA:baseConfig: default # 使用默认配置backendB:baseConfig: default # 使用默认配置

 3.依赖

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/> <!-- lookup parent from repository --></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><resilience4j.version>2.0.2</resilience4j.version></properties><dependencies><!-- Spring Boot Starters --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- Resilience4j --><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-spring-boot2</artifactId><version>${resilience4j.version}</version></dependency><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-all</artifactId><version>${resilience4j.version}</version></dependency><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-reactor</artifactId><version>${resilience4j.version}</version></dependency><!-- Micrometer Prometheus --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency><!-- Chaos Monkey for Spring Boot --><dependency><groupId>de.codecentric</groupId><artifactId>chaos-monkey-spring-boot</artifactId><version>2.7.0</version></dependency><!-- Vavr Jackson --><dependency><groupId>io.vavr</groupId><artifactId>vavr-jackson</artifactId><version>0.10.3</version></dependency><!-- Test Dependencies --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><version>3.4.22</version><scope>test</scope></dependency></dependencies>

 这里正好用Prometheus和Grafana看看效果

4 总结

通过本文的介绍,你应该已经了解了如何在 Spring Boot 项目中配置和使用 Resilience4j 来实现断路器、重试、舱壁、限流器和限时器等功能,Resilience4j 提供了丰富的配置选项和灵活的使用方式,帮助你构建弹性的微服务。

相关文章:

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中&#xff0c;服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库&#xff0c;专为函数式编程设计&#xff0c;提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示&#xff0c;只是查看一下官方案例并换成maven构建相关展示&…...

Hadoop3:MR程序压测实验

一、环境要求 内存&#xff1a;128G CPU&#xff1a;32C 磁盘&#xff1a;8T 注&#xff1a;一个虚拟机不超过150G磁盘尽量不要执行这段代码 二、案例 1、需求 使用Sort程序评测MapReduce 2、操作步骤 1、使用RandomWriter来产生随机数&#xff0c;每个节点运行10个Map任…...

初学者如何通过建立个人博客盈利

建立个人博客不仅能让你在网上表达自己&#xff0c;还能与他人建立联系。通过博客&#xff0c;可以创建自己的空间&#xff0c;分享想法和故事&#xff0c;并与有相似兴趣和经历的人交流。 本文将向你展示如何通过建立个人博客来实现盈利。你将学习如何选择博客主题、挑选合适…...

构建稳健性:如何在Gradle中配置构建失败时的行为

构建稳健性&#xff1a;如何在Gradle中配置构建失败时的行为 在软件开发过程中&#xff0c;构建失败是不可避免的。然而&#xff0c;如何优雅地处理构建失败并从中恢复&#xff0c;是提高开发效率和软件质量的关键。Gradle&#xff0c;作为一款强大的构建工具&#xff0c;提供…...

大语言模型-基础及拓展应用

一、基础模型 1、Transformer 2、bert 3、gpt 二、大语言模型 三、句子向量 四、文档解析 1、通用解析 2、docx解析 3、 pdf解析 4、pptx解析 五、向量数据库...

STM32使用Wifi连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下&#xff0c;如何使用阿里云物联网平台&#xff0c;创建一个简单的远程控制小灯示例。 完整工程&a…...

2024.7.16日 最新版 docker cuda container tookit下载!

nvidia官方指导 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 其实就是这几个命令&#xff0c;但是有墙&#xff1a; curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/shar…...

打印室预约小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当前预约管理&#xff0c;预约历史管理&#xff0c;打印记录管理 开发系统&#xff1a;Windows 架构模式&#xff1a;SSM JD…...

Android音视频—OpenGL 与OpenGL ES简述,渲染视频到界面基本流程

文章目录 OpenGL 简述特点和功能主要组件OpenGL ES当前状态 OpenGL ES 在 Android 上进行视频帧渲染总体流程 OpenGL 简述 OpenGL&#xff08;Open Graphics Library&#xff09;是一个跨平台的、语言无关的应用程序编程接口&#xff08;API&#xff09;&#xff0c;用于开发生…...

Vscode中Github copilot插件无法使用(出现感叹号)解决方案

1、击扩展或ctrl shift x ​​​​​​​ 2、搜索查询或翻找到Github compilot 3、点击插件并再左侧点击登录github 点击Sign up for a ... 4、跳转至github登录页&#xff0c;输入令牌完成登陆后返回VScode 5、插件可以正常使用...

Spring-cloud-openfeign-@FeignClient中的configuration属性

FeignClient注解中的configuration属性就是设置相关配置&#xff0c;但是这个属性写的非常的不好&#xff0c;而且在它的注释中也没有写全&#xff0c;所以本文记录一下&#xff0c;当我们的代码如下时&#xff1a; FeignClient(name "xxx", configuration Abc.cl…...

实验七:图像的复原处理

一、实验目的 熟悉常见的噪声及其概率密度函数。熟悉在实际应用中比较重要的图像复原技术,会对退化图像进行复原处理。二、实验原理 1. 图像复原技术,说简单点,同图像增强那样,是为了以某种预定义的方式来改进图像。在具体操作过程中用流程图表示,其过程就如下面所示: 2…...

前端面试题日常练-day94 【Less】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末 在Less中&#xff0c;以下哪个功能用于处理文本换行&#xff1f; a) wrap-text() b) word-wrap() c) text-wrap() d) line-break() Less中的Variables是用来做什么的&#xff1f; a) 控制元素位置 b)…...

c 语言 中 是否有 unsigned 安;这种写法?

你提到的结构体定义使用了unsigned这种没有完全限定类型的写法&#xff0c;在C语言中&#xff0c;这种语法通常会被解释为unsigned int。这是因为在C语言中&#xff0c;unsigned是unsigned int的缩写形式。 下面是你的结构体定义以及解释&#xff1a; struct exec {unsigned …...

Hive第三天

1. 后台启动HIVE的JDBC连接 0 表示标准输入 1 表示标准输出 2 表示标准错误输出 nohup 表示挂起 最后的 & 表示 后台启动 nohup hive -service hiveserver2 > /usr/local/soft/hive-3.1.2/log/hiveserver2.log 2>&1 & jps 查看 Runj…...

【C++】模版初阶以及STL的简介

个人主页~ 模版及STL 一、模版初阶1、泛型编程2、函数模版&#xff08;1&#xff09;概念&#xff08;2&#xff09;函数模版格式&#xff08;3&#xff09;函数模版的原理&#xff08;4&#xff09;函数模版的实例化①显式实例化②隐式实例化 &#xff08;5&#xff09;模版参…...

51单片机学习(4)

一、串口通信 1.串口通信介绍 写完串口函数时进行模块化编程&#xff0c;模块化编程之后要对其进行注释&#xff0c;以便之后使用模块化函数&#xff0c;对模块化.c文件中的每一个函数进行注释。 注意&#xff1a;一个函数不能既在主函数又在中断函数中 模式1最常用&#xf…...

3D问界—MAYA制作铁丝栅栏(透明贴图法)

当然&#xff0c;如果想通过建立模型法来实现铁丝栅栏的效果&#xff0c;也不是不行&#xff0c;可以找一下栅栏建模教程。本篇文章主要是记录一下如何使用透明贴图来实现创建铁丝栅栏&#xff0c;主要应用于场景建模&#xff0c;比如游戏场景、建筑场景等大环境&#xff0c;不…...

编译器对C++23的支持程度

详见这里...

k8s核心操作_存储抽象_K8S中使用Secret功能来存储密码_使用免密拉取镜像_k8s核心实战总结---分布式云原生部署架构搭建033

注意在看的时候一定要把 dxxxx中的xxxx换成--o----c----k----e----r 然后我们再来看一个k8s中的secret的功能,这个功能 用来存储密码的,configMap是用来存配置的 比如我们有个pod,他的镜像,如果是需要密码的,那么 我们现在是从公共仓库拉取的,如果我们从私有仓库拉取,有密码…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...