feign 使用基础

pclin
9
2025-01-09

Feign 是一个轻量级的 http 请求调用框架,可以通过 Java 接口注解的方式进行 Http 请求。Feign 通过注解处理,将请求模板化。在实际调用时,传入参数,并根据参数应用到请求上,最终转化为真正的请求。该框架封装了 http 调用流程,让其更加简单易用。

#一、架构说明

参考新增微服务完成 CRUD (opens new window),在操作时会新建一个包含两个模块的 Maven 微服务业务模块。

x
├── x-api     # api 模块主要存放实体、feign 调用接口
└── x-biz    # biz 模块主要存放具体的业务实现,其他模块不能直接导入

如上图所示,“服务调用方 X”调用“服务提供方 upms”的相关接口。因此,"X"服务需要引入 upms-api 的 Maven 模块。 需要特别注意:引入是服务提供方的 API 模块,而不是引入 BIZ

#二、具体操作

#FeignClient 定义

如上图所示,我们以 upms 模块为例,展示如何定义 feign 调用。

  • ①:如上文(一、架构说明)所述,Feign 客户端必须定义在 API 模块中。如果服务提供方没有 API 模块(例如 mp/pay 等模块),则需要自己创建对应的 Maven API 模块,参考 upms-api 即可。

  • ③:feignclient 注解的 contextId 属性代表 bean 名称,在整个工程中必须唯一。

  • ④:feignclient 注解的 value 属性代表服务提供方的名称。

  • ⑤:Mapping 路径对应服务提供方接口路径(服务提供接口的 Controller Mapping + 接口 Mapping)。

#SPI 文件声明

如上图 ⑥,我们需要将 feignclient 所属类的全路径配置在 META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports 文件中

1719415233

作用说明

虽然框架会自动扫描 com.pig4cloud.pigx 包下的所有FeignClient,但在部分情况下,由于包名定义不规范,可能会导致FeignClient无法被扫描到,非常难以排查。因此,将FeignClient配置在Spring SPI文件中,可以确保在任何情况下都能正确加载相应的FeignClient。

动物装饰