Resilience4J之隔离(BulkHead)

2024-03-07 15:12

本文主要是介绍Resilience4J之隔离(BulkHead),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Resilience4J之隔离(BulkHead)

中文官网https://github.com/lmhmhl/Resilience4j-Guides-Chinese/blob/main/core-modules/bulkhead.md

作用是:限制并发。

依赖隔离&负载保护:用于限制对于下游服务的最大并发数量的限制

maven依赖

<!--resilience4j-bulkhead-->
<dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-bulkhead</artifactId>
</dependency>

Resilience4J提供了两种隔离实现方式,可以限制并发执行数量

1.信号量舱壁(SemaphoreBulkhead)

信号量舱壁(SemaphoreBulkhead)原理

当信号量有空闲时,进入系统的请求会直接获取信号量并开始业务处理。

当信号量全被占用时,接下来的请求将会进入阻塞状态,SemaphoreBulkhead提供了一个阻塞计时器,

如果阻塞状态的请求在阻塞计时内无法获取到信号量则系统会拒绝这些请求。

若请求在阻塞计时内获取到了信号量,那将直接获取信号量并执行相应的业务处理。

2.客户端 application.yaml配置
####resilience4j bulkhead 的例子
resilience4j:bulkhead:configs:default:maxConcurrentCalls: 2 # 隔离允许并发线程执行的最大数量maxWaitDuration: 1s # 当达到并发调用数量时,新的线程的阻塞时间,我只愿意等待1秒,过时不候进舱壁兜底fallbackinstances:cloud-payment-service:baseConfig: defaulttimelimiter:configs:default:timeout-duration: 20s
3.客户端方法
@GetMapping(value = "/feign/pay/bulkhead/{id}")
@Bulkhead(name = "cloud-payment-service",fallbackMethod = "myBulkheadFallback",type = Bulkhead.Type.SEMAPHORE)
public String myBulkhead(@PathVariable("id") Integer id)
{return payFeignApi.myBulkhead(id);
}public String myBulkheadFallback(Throwable t){return "myBulkheadFallback,隔板超出最大数量限制,系统繁忙,请稍后再试-----/(ㄒoㄒ)/~~";}
2.固定线程池舱壁(FixedThreadPoolBulkhead)

FixedThreadPoolBulkhead的功能与SemaphoreBulkhead一样也是用于限制并发执行的次数的,但是二者的实现原理存在差别而且表现效果也存在细微的差别。FixedThreadPoolBulkhead使用一个固定线程池和一个等待队列来实现舱壁。

当线程池中存在空闲时,则此时进入系统的请求将直接进入线程池开启新线程或使用空闲线程来处理请求。

当线程池中无空闲时时,接下来的请求将进入等待队列,

若等待队列仍然无剩余空间时接下来的请求将直接被拒绝,

在队列中的请求等待线程池出现空闲时,将进入线程池进行业务处理。

另外:ThreadPoolBulkhead只对CompletableFuture方法有效,所以我们必创建返回CompletableFuture类型的方法

消费端application.yaml配置
resilience4j:timelimiter:configs:default:timeout-duration: 10s #神坑的位置,timelimiter 默认限制远程1s,超于1s就超时异常,配置了降级,就走降级逻辑thread-pool-bulkhead:configs:default:#可容纳请求数为 max-thread-pool-size  + queue-capacitycore-thread-pool-size: 1max-thread-pool-size: 1queue-capacity: 1instances:cloud-payment-service:baseConfig: default
java代码
    @GetMapping(value = "/feign/pay/bulkhead/{id}")@Bulkhead(name = "cloud-payment-service",fallbackMethod = "myBulkheadPoolFallback",type = Bulkhead.Type.THREADPOOL)public CompletableFuture<String> myBulkheadTHREADPOOL(@PathVariable("id") Integer id){System.out.println(Thread.currentThread().getName()+"\t"+"enter the method!!!");try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }System.out.println(Thread.currentThread().getName()+"\t"+"exist the method!!!");return CompletableFuture.supplyAsync(new Supplier<String>() {@Overridepublic String get() {return "Bulkhead.Type.THREADPOOL";}});}public CompletableFuture<String> myBulkheadPoolFallback(Integer id,Throwable t){return CompletableFuture.supplyAsync(() -> "Bulkhead.Type.THREADPOOL,系统繁忙,请稍后再试-----/(ㄒoㄒ)/~~");}

这篇关于Resilience4J之隔离(BulkHead)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783931

相关文章

国产隔离放大器:增强信号完整性和系统安全性的指南

隔离放大器是电子领域的关键组件,特别是在信号完整性和电气隔离至关重要的应用中。这些放大器隔离输入和输出信号,使它们能够在没有直接电气连接的情况下跨不同系统传输数据。这确保了电路一部分的高压尖峰或噪声不会影响另一部分,从而保护了系统和用户。随着国产隔离放大器的不断发展,它们提供了性能、可靠性和成本效益的完美结合,使其成为工程师和系统设计师的理想选择。 1. 了解国产隔离放大器的优势 增强信号

oracle事务隔离级别

文章目录 数据库事务概况1.事务相关概念2.事务的四个特性ACID : oracle事务隔离级别1 .两个事务并发访问数据库数据时可能存在的问题 数据库事务概况 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退。 1.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行DML、DCL、DDL语

Java类加载器--使用自定义类加载器实现模块隔离

在看下面的实现之前,可以先了解下面的几篇文章内容: 1 https://blog.csdn.net/u013412772/article/details/80837735 2 https://blog.csdn.net/u013412772/article/details/80842636 3 https://blog.csdn.net/u013412772/article/details

深入了解数字隔离器:革命性的隔离技术

数字隔离器已成为光耦合器的一种更优越的替代品,具有尺寸更小、速度更快、功耗更低、集成更简单和可靠性更高等优点。 在过去,设计工业、医疗和其他隔离系统的工程师在安全隔离方面的选择有限,通常默认使用光耦合器。如今,数字隔离器提供了更先进的解决方案,在性能、紧凑性、能效和成本效益方面均表现出色。选择合适的数字隔离器需要了解三个关键方面:绝缘材料、内部结构和数据传输方法。 使用隔离主要是为了符合安全标

mysql 种隔离级别 以及每种级别对应的问题

mysql 4种隔离级别(1)未提交读(2)提交读(3)可重复读(4)串行化 (1)幻读:t1查询出两天记录,此时t2插入一条id=3的记录然后commit,t1此时插入id=3的记录 报主键错误,对与delete和insert。(2)不可重复读:t1查出id=1的记录name=a,此时t2修改id=1的name=b并commit。此时t1再次查询出id=1的name=b,导致两次查询出的数

Mysql的四个隔离级别 与mvcc(2)

特殊颜色字体为自己总结,关于mvcc直接看最后面的。 一、Mysql的四个隔离级别 预备工作: 先创建一个test数据库及account表, create database test;use test;create table account(id int not null,balance float not null,PRIMARY KEY ( id)) 向accoun

mysql隔离级别与mvcc 关系的理解

MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。 主要通过以下两个方式组合 来实现隔离级别的 版本链:用于存储历史已经完成的事务版本。 readview:主要就是有个列表来存储我们系统中当前活跃着的读写事务,也就是begin了还未提交的事务 在Mysql的In

PN8016SSC-R1B非隔离5V300mA小功率开关电源芯片

PN8016SSC-R1B集成PFM控制器及800V高雪崩能力智能功率MOSFET,用于外部元器件精简的小功率非隔离开关电源,输出电压可通过FB电阻调整。PN8016内置800V高压启动与自供电模块,实现系统快速启动、超低待机、自供电功能。该芯片提供了完整的智能化保护功能,包括过载保护,欠压保护,过温保护。另外PN8016的降频调制技术有助于改善EMI特性。 PN8016SSC-R1B产品特点:

工业必备:SLM34x系列SLM340CK-DG 1A兼容光耦的单通道隔离驱动器

SLM34x系列SLM340CK-DG是单通道兼容光耦的隔离式栅极驱动器产品系列,适用于驱动IGBT、MOSFET。其峰值驱动电流1.0A。与光耦栅极驱动器相比,其性能和可靠性都得到显著的提升,同时保持了对光耦栅极隔离驱动器管脚的兼容。性能提升包括高共模瞬态抗扰度(CMTI)、低传播延迟和较小的脉宽失真。 SLM34x系列SLM340CK-DG的输入级是一个“模拟二极管”,与传统光耦相比,没

光盘安全隔离与信息单向导入系统-信刻

信刻从用户需求出发,为更多用户提供安全可靠的跨网数据单向导入/导出光盘摆渡系统解决方案,解决内外网数据交换的问题,确保数据交换过程的安全性。 公司所研发出的光盘安全隔离与信息单向导入系统依托软硬件相结合的技术,集策略摆渡、加密及杀毒、安全策略、安全审计、日志管理等功能于一体,采用智能机械手模拟人手工操作光盘方式,实现了在完全物理隔离条件下的光盘安全隔离与信息单向导入,确保自动导入数据的安全性。