📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,如需交流,欢迎留言评论。👍
写在前面的话
前不久博主整理了 《企业实战分享 · MyBatis 使用合集》,粉丝私信反响不错,今天继续整理它的姐妹篇。
博主所在公司的技术栈为:后端 SpringCloud + 前端 Vue/Nuxt,在后端开发中,内部服务间的调用采用了Feign
来完成,这个和MyBatis
一样属于企业开发的高频用法,因此也做一下知识汇总,希望与君共勉。
Feign 基础入门
技术简介
Feign 是 Spring Cloud 提供的声明式、模板化的 HTTP 客户端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Spring Cloud 集成 Feign 并对其进行了增强,使 Feign 支持了 Spring MVC 注解;Feign 默认集成了 Ribbon,所以Fegin默认就实现了负载均衡的效果。
博主所在公司的新框架对内部远程调用做了一次升级,采用 OpenFeign 调用方式替代旧框架内部服务之间的 Dubbo 和 HttpUtils 调用方式。
OpenFeign 是一个声明式、模板化的 HTTP 客户端,可以帮助开发者更快捷、优雅地调用HTTP API。
使用前提
Tips:简单介绍使用Feign的一些前置步骤,这些其实都是框架搭建人员负责的,具体开发一般关心后续实质用法。
Step1、引入 Maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Step2、在启动类添加@EnableFeignClients,或者为Feign接口添加@Component等注解,总之,需要被Spring框架识别为一个组件,以便Spring可以管理它。
Step3、在服务提供者定义一下 Controller,
Step4、在服务消费者定义Feign 客户端,并按需使用
基础用法
以门户调用医嘱的接口为例,实现 Feign 调用有两种方式:
1、服务消费方门户,自己开发对应的 Feign 接口,指向对方服务;
2、服务提供方医嘱, 在 api 模块书写对应的 Feign 接口,完成后发布私服,提供服务消费方门户调用;
Tips:两种方式各有优缺点,方案1可以减少不需要的接口和实体影响,改造期间减少对方服务影响;方案2可以减少重复编码,增加复用。原则上推荐在消费端书写 Feign 接口。
示例 - 服务提供方
@PostMapping(value="/extHandle")
ApiResult<String> extHandle(@RequestBody V2ShiftRecordPrintRo v2ShiftRecordPrintRo) throws Exception {
//省去具体业务逻辑
}
示例 - Feign 接口
@FeignClient(value = FeignConstant.Service.PORTAL, url = FeignConstant.Url.PORTAL, path = "/inner/ext")
public