📄 feign 使用基础
内部资料,请刷新扫码登录
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
文件中
作用说明
虽然框架会自动扫描 com.pig4cloud.pigx 包下的所有FeignClient,但在部分情况下,由于包名定义不规范,可能会导致FeignClient无法被扫描到,非常难以排查。因此,将FeignClient配置在Spring SPI文件中,可以确保在任何情况下都能正确加载相应的FeignClient。