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

openfeign如何获取远程调用接口上的url地址

OpenFeign不是通过“反射读取 @GetMapping 来拿 URL 并直接拼出来调用”的简单模型,它的实现要更“分层”,本质是:

启动时解析注解 → 生成 Method 元数据 → 运行时动态代理 + Contract 解释 → RequestTemplate 构建 URL


一、先给结论(面试级)

Feign 不是运行时反射拼 URL 而是: 启动时解析 Spring MVC 注解 → 生成 MethodMetadata → 调用时由 Contract 生成 RequestTemplate → 再由 Encoder + Client 发 HTTP 请求

二、你提到的点:@GetMapping 是什么时候被处理的?

例如:

@FeignClient("user-service") public interface UserClient { @GetMapping("/user/{id}") User get(@PathVariable Long id); }

❌ 错误理解(常见误区)

运行时反射 @GetMapping → 直接拿 URL

👉 不是这样


✅ 正确流程

1️⃣ 启动阶段:扫描 Feign 接口

Spring Boot 启动时:

FeignClientsRegistrar

扫描:

@FeignClient

2️⃣ 解析方法上的注解(这里才“读取@GetMapping”)

由:

SpringMvcContract

做解析。

它会读取:

@GetMapping("/user/{id}") @PathVariable @RequestParam

3️⃣ 生成 MethodMetadata(关键)

Feign不会直接存 URL,而是存:

MethodMetadata { methodName: "get", url: "/user/{id}", httpMethod: GET, params: [id] }

三、运行时发生什么?

调用:

userClient.get(1L);

进入:

FeignInvocationHandler.invoke()

1️⃣ 创建 RequestTemplate(核心)

RequestTemplate

内容:

GET /user/{id}

2️⃣ 参数替换(不是反射,是模板绑定)

{id} → 1

变成:

GET /user/1

3️⃣ 选择服务实例(负载均衡)

来自:

  • Nacos / Eureka
user-service: 10.0.0.1:8080 10.0.0.2:8080

选一个:

10.0.0.1:8080

4️⃣ 拼成完整 URL

http://10.0.0.1:8080/user/1

5️⃣ HTTP Client发送请求

例如:

  • OkHttp
  • Apache HttpClient
  • JDK HttpClient

四、关键点总结(面试重点)

❗ Feign不是“反射调用注解”

而是:

1. 启动时解析注解(SpringMvcContract) 2. 构建方法元数据(MethodMetadata) 3. 运行时生成 RequestTemplate 4. 再拼URL + 发HTTP请求

五、为什么不能简单用反射?

如果只是反射:

method.getAnnotation(GetMapping.class)

问题:

❌ 1. 无法处理路径变量

/user/{id}

❌ 2. 无法统一参数绑定规则

@PathVariable @RequestParam @RequestBody

❌ 3. 无法支持复杂扩展

拦截器 重试 负载均衡 熔断

六、Feign核心设计思想

一句话:

Feign = 注解解析 + 方法模板 + HTTP执行器

不是:

反射 = 直接拿URL
http://www.jsqmd.com/news/984808/

相关文章:

  • 广元黄金回收2026大盘价当面结算无套路 - 润富黄金回收
  • 2026菏泽黄金回收全攻略 六家门店横向评测附地址 - 余生黄金回收
  • 珠三角五金冲压件工厂选购指南:如何选到靠谱合作伙伴 - 热点速览
  • 2026锦州乡镇城区黄金回收避坑指南 多家正规门店综合测评 - 余生黄金回收
  • 别再只用加减乘除了!用Python的math和operator库,一行代码搞定M和N的5种运算
  • UVM验证进阶:拆解start_item源码,搞懂sequencer参数怎么用才高效
  • 合肥市大型园区消防管道测漏公司,地埋管网渗漏精准探测,全天候上门服务电话-消防漏水检测top推荐公司 - 同城资讯
  • nacos的实现原理
  • 在无锡回收黄金被坑上千块?记住避坑铁律,谨防被骗 - 奢侈品回收评测
  • 告别跳转混乱!手把手教你为嵌入式项目配置VSCode/Vim的clangd,精准索引交叉编译头文件
  • 2026滨州黄金回收避坑全指南 多家正规门店实测对比分析 - 余生黄金回收
  • Protobuf序列化中的零长度消息处理
  • 2026 鞍山厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 2026 长治厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 从硬件总线视角看TriCore多核锁:TC264的CMPSWAP.W指令如何避免抢锁冲突
  • 现场写作/最美笔记/英文书写大赛投票怎么一键生成?微信小程序免费测评|众星评选实测推荐 - 微信投票小程序
  • 别再只画流线图了!用POD给你的CFD结果做一次‘CT扫描’:以Re=100圆柱绕流为例
  • 林地全自动拓荒机2026年|选源头厂家还是中间商? - 博客万
  • 2026年乐平管道疏通推荐指南:从家庭到商铺全场景覆盖 实体团队专业设备省心选择 - 本地品牌推荐
  • 新手如何绕过eduSRC账号门槛?一个SQL注入漏洞带你拿到第一张证书
  • 2026年主流粮食烘干机厂家品牌解析及选购指南 - 博客万
  • 吉安泰和县房屋漏水检测上门服务 卫生间厨房阳台地暖水管精准查漏水 - 同城资讯
  • 别再只把Flink当流处理了:从电商实时数仓到风控,聊聊它的“数据管道”新角色
  • 2026年度嵌入式核心板工厂综合实力深度横评:5大品牌对比及选型指南 - 品牌报告
  • 保姆级教程:在Ubuntu 18.04上从驱动到应用,搞定奥比中光Astra相机(含OpenNI2配置)
  • 2026年地坪材料与工程采购参考:环氧地坪环氧自流平固化地坪耐磨地坪 | 昱锟地坪生产施工一体化CMA/CNAS认证全国服务 - 企业品牌优选推荐官
  • 场景下接线端子品牌排名怎么选:五家主流品牌深度测评 - 热点速览
  • 从WebLogo到MEME:手把手教你挖掘多序列比对中的保守区域与功能基序
  • 别再只用加减乘除了!用Python的math和内置函数,解锁M和N的5种高级运算
  • 2026衡阳市黄金回收全攻略 六家实体门店横向评测附地址避坑指南 - 余生黄金回收