【源码】openfeign集成spring-cloud-starter-circuitbreaker-resilience4j 源码分析
依赖本文源码分析pom依赖如下版本 3.1.0dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-circuitbreaker-resilience4j/artifactId version3.1.0/version /dependency自动装配入口org.springframework.cloud.openfeign.FeignAutoConfiguration .CircuitBreakerPresentFeignTargeterConfiguration.circuitBreakerFeignTargeter详细配置代码Configuration(proxyBeanMethodsfalse)ConditionalOnClass(CircuitBreaker.class)ConditionalOnProperty(valuespring.cloud.openfeign.circuitbreaker.enabled, havingValuetrue)protected static class CircuitBreakerPresentFeignTargeterConfiguration{Bean ConditionalOnMissingBean(CircuitBreakerFactory.class)public TargeterdefaultFeignTargeter(){returnnew DefaultTargeter();}Bean ConditionalOnMissingBean(CircuitBreakerNameResolver.class)ConditionalOnProperty(valuespring.cloud.openfeign.circuitbreaker.alphanumeric-ids.enabled, havingValuefalse)public CircuitBreakerNameResolvercircuitBreakerNameResolver(){returnnew DefaultCircuitBreakerNameResolver();}Bean ConditionalOnMissingBean(CircuitBreakerNameResolver.class)ConditionalOnProperty(valuespring.cloud.openfeign.circuitbreaker.alphanumeric-ids.enabled, havingValuetrue, matchIfMissingtrue)public CircuitBreakerNameResolveralphanumericCircuitBreakerNameResolver(){returnnew AlphanumericCircuitBreakerNameResolver();}SuppressWarnings(rawtypes)Bean ConditionalOnMissingBean ConditionalOnBean(CircuitBreakerFactory.class)public Targeter circuitBreakerFeignTargeter(CircuitBreakerFactory circuitBreakerFactory, Value(${spring.cloud.openfeign.circuitbreaker.group.enabled:false})boolean circuitBreakerGroupEnabled, CircuitBreakerNameResolver circuitBreakerNameResolver){returnnew FeignCircuitBreakerTargeter(circuitBreakerFactory, circuitBreakerGroupEnabled, circuitBreakerNameResolver);}static class DefaultCircuitBreakerNameResolver implements CircuitBreakerNameResolver{Override public String resolveCircuitBreakerName(String feignClientName, Target?target, Method method){returnFeign.configKey(target.type(), method);}}static class AlphanumericCircuitBreakerNameResolver extends DefaultCircuitBreakerNameResolver{Override public String resolveCircuitBreakerName(String feignClientName, Target?target, Method method){returnsuper.resolveCircuitBreakerName(feignClientName, target, method).replaceAll([^a-zA-Z0-9],);}}}circuitBreakerFeignTargeter 方法会返回一个ATargeter对象 依赖的参数是CircuitBreakerFactory circuitBreakerFactory这个CircuitBreakerFactory 参数是在 org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JAutoConfiguration中定义的配置如下Bean ConditionalOnMissingBean(CircuitBreakerFactory.class)public Resilience4JCircuitBreakerFactory resilience4jCircuitBreakerFactory(CircuitBreakerRegistry circuitBreakerRegistry, TimeLimiterRegistry timeLimiterRegistry, Autowired(requiredfalse)Resilience4jBulkheadProvider bulkheadProvider, Resilience4JConfigurationProperties resilience4JConfigurationProperties){Resilience4JCircuitBreakerFactory factorynew Resilience4JCircuitBreakerFactory(circuitBreakerRegistry, timeLimiterRegistry, bulkheadProvider, resilience4JConfigurationProperties);customizers.forEach(customizer -customizer.customize(factory));returnfactory;}上文提到的ATargeter对象 是一个FeignCircuitBreakerTargeter实例这个类主要作用是在org.springframework.cloud.openfeign.FeignClientFactoryBean#getObject起作用创建OpenFeign代理对象最终执行的代码是feign.ReflectiveFeign#newInstance(feign.Target, C)publicTT newInstance(TargetTtarget, C requestContext){ReflectiveFeign.TargetSpecificationVerifier.verify(target);MapMethod, InvocationHandlerFactory.MethodHandlermethodToHandlerthis.targetToHandlersByName.apply(target, requestContext);InvocationHandler handlerthis.factory.create(target, methodToHandler);T proxy(T)Proxy.newProxyInstance(target.type().getClassLoader(), new Class[]{target.type()}, handler);for(InvocationHandlerFactory.MethodHandler methodHandler:methodToHandler.values()){if(methodHandler instanceof DefaultMethodHandler){((DefaultMethodHandler)methodHandler).bindTo(proxy);}}returnproxy;}从这个方法就能看出openfeign的乾坤了说实话这细节太多 记也记不住调用入口feign调用CircuitBreaker栈org.springframework.cloud.openfeign.FeignCircuitBreakerInvocationHandler.invoke → org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JCircuitBreakerFactory.create ↓ org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JCircuitBreaker.run ↓ org.springframework.cloud.circuitbreaker.resilience4j.Resilience4jBulkheadProvider.run如果要细细研究就只能打断点跟踪了todo~~

相关新闻

美的BD/BC-143KMF(E)冰柜评测:一级能效如何实现长期省电省钱

美的BD/BC-143KMF(E)冰柜评测:一级能效如何实现长期省电省钱

最近在帮朋友选购家用冰柜时,发现一个很有意思的现象:很多人在选购时只关注容量和价格,却忽略了一个更重要的指标——长期使用成本。一台看似便宜的冰柜,如果耗电量大,几年下来可能比购买时省下的钱还要多。今天我们就…

2026/8/8 19:14:00 阅读更多 →
如何基于Dify快速构建AI原生应用

如何基于Dify快速构建AI原生应用

部署效果 Dify入门 官网:https://cloud.dify.ai/apps Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术…

2026/8/8 14:08:01 阅读更多 →
AWS EC2上部署机器学习模型:从Flask API到生产级MaaS服务

AWS EC2上部署机器学习模型:从Flask API到生产级MaaS服务

1. 项目概述:把训练好的模型变成随时可调用的“网络接口”,而不是藏在本地电脑里的文件你辛辛苦苦调了两周超参,终于让模型在验证集上准确率冲到了92.7%,心里刚松一口气,产品同学发来消息:“模型什么时候能…

2026/8/7 13:29:30 阅读更多 →

最新新闻

word转图片免费方法有哪些?盘点7款亲测可用的PDF格式转换工具

word转图片免费方法有哪些?盘点7款亲测可用的PDF格式转换工具

上个月我负责整理部门的投标材料,甲方发来的清单模板是PDF格式,需要抠出其中两页表格贴进我们的方案里。我先是截图,发现放大后锯齿严重,甲方明确要求矢量清晰度,截图肯定不行。后来用青蓝PDF转换把PDF转成了高清PNG&a…

2026/8/8 19:13:01 阅读更多 →
Rocksplicator监控与告警:关键指标解析及异常处理方案

Rocksplicator监控与告警:关键指标解析及异常处理方案

Rocksplicator监控与告警:关键指标解析及异常处理方案 【免费下载链接】rocksplicator RocksDB Replication 项目地址: https://gitcode.com/gh_mirrors/ro/rocksplicator Rocksplicator作为基于RocksDB的复制系统,其稳定运行依赖完善的监控体系。…

2026/8/8 19:13:01 阅读更多 →
掌握yaml-cpp错误恢复机制:构建坚不可摧的C++ YAML解析系统

掌握yaml-cpp错误恢复机制:构建坚不可摧的C++ YAML解析系统

掌握yaml-cpp错误恢复机制:构建坚不可摧的C YAML解析系统 【免费下载链接】yaml-cpp A YAML parser and emitter in C 项目地址: https://gitcode.com/GitHub_Trending/ya/yaml-cpp 在复杂的现代软件开发中,配置文件错误往往是导致系统崩溃的隐形…

2026/8/8 19:13:01 阅读更多 →
Faiss向量检索库:10倍性能提升的终极搜索解决方案

Faiss向量检索库:10倍性能提升的终极搜索解决方案

Faiss向量检索库:10倍性能提升的终极搜索解决方案 【免费下载链接】faiss A library for efficient similarity search and clustering of dense vectors. 项目地址: https://gitcode.com/GitHub_Trending/fa/faiss 你是否在处理海量向量数据时感到力不从心&…

2026/8/8 19:13:01 阅读更多 →
生物分子结构预测革命:Boltz如何让药物发现快1000倍

生物分子结构预测革命:Boltz如何让药物发现快1000倍

生物分子结构预测革命:Boltz如何让药物发现快1000倍 【免费下载链接】boltz Official repository for the Boltz biomolecular interaction models 项目地址: https://gitcode.com/GitHub_Trending/bo/boltz 在药物研发的漫长道路上,科学家们常常…

2026/8/8 19:13:01 阅读更多 →
Klock API速查手册:从基础到高级的时间处理函数全解析

Klock API速查手册:从基础到高级的时间处理函数全解析

Klock API速查手册:从基础到高级的时间处理函数全解析 【免费下载链接】klock Multiplatform Date and time library for Kotlin 项目地址: https://gitcode.com/gh_mirrors/kl/klock Klock是一款面向Kotlin的跨平台日期时间处理库,提供了简洁高效…

2026/8/8 19:12:01 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/8 17:02:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →