当前位置: 首页 > 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.rkmt.cn/news/1496551.html

相关文章:

  • 别再只用加减乘除了!用Python的math和operator库,一行代码搞定M和N的5种运算
  • 2026 鞍山厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 新手如何绕过eduSRC账号门槛?一个SQL注入漏洞带你拿到第一张证书
  • 别再只把Flink当流处理了:从电商实时数仓到风控,聊聊它的“数据管道”新角色
  • 2026年度嵌入式核心板工厂综合实力深度横评:5大品牌对比及选型指南 - 品牌报告
  • 保姆级教程:在Ubuntu 18.04上从驱动到应用,搞定奥比中光Astra相机(含OpenNI2配置)
  • 别再为嵌入式打印浮点数发愁了!手把手教你魔改SEGGER RTT的printf函数
  • 2026年绝缘板源头供应企业选择参考:从通用材料到特种应用的全景分析 - 企业推荐官【官方】
  • 闲置黄金怎么卖最划算 2026黄金回收计价方式本地正规店 - 余生黄金回收
  • 郑州闲置黄金变现,合扬高价回收不扣损耗 - 开心测评
  • 信息学奥赛刷题实战:用Dijkstra算法搞定《城市路》这道题(附C++完整代码)
  • 天津南开区烧烤推荐|无剧本串吧 适合朋友夜宵团建聚 - 速递信息
  • 营口黄金回收全流程高价变现攻略 - 润富黄金回收
  • 告别丑地图!用ArcGIS Pro给你的坐标点数据做个‘美容’(从符号、标注到布局视图)
  • 2026年6月苏州环氧地坪行业研究报告:哪家施工规范质量又好 - GrowthUME
  • 数学建模竞赛必看:微分方程模型怎么选、怎么建?从赛题到论文的避坑指南
  • 上饶市自来水管漏水检测,厂区地下管网测漏查漏 市政管道漏水检测 不开挖精准找漏点 - 同城资讯
  • 实体企业GEO,从苏州到金华再到常熟,我更确定GEO适合实体企业 - 招财兔数字员工
  • 2026年橡胶机械隔热板供应商评估:聚焦常州市永诚新材料与行业关键企业 - 企业推荐官【官方】
  • Git 每次 Pull 都要输入密码?教你彻底实现免密操作
  • 2026年6月常州沙盘模型定制行业研究报告:哪家服务比较优质 - GrowthUME
  • 国内总铅水质在线分析仪十大品牌排名 - 仪表人老张
  • 衡阳闲置黄金变现攻略 2026六大正规回收门店综合测评 - 余生黄金回收
  • 大盘金价同步无锡回收,2026 卖黄金别盲目等高点 - 奢侈品回收评测
  • 山东微程科技:中国 AI 大模型领跑,本地商家的机会在这里
  • 第2章 安装开发环境(DevEco Studio)
  • Edge浏览器上方搜索栏搜索跳转到百度等搜索引擎搜索问题.
  • 117、飞控中的事件驱动编程
  • 【一句话经验】Everything如何精确搜索
  • 人生感悟 --- 职场潜规则 之 催人下班