优雅实现远程调用-OpenFeign

1. RestTemplate存在的问题

虽说RestTemplate对HTTP封装后,以及比直接使用HTTPClient简单方便很多了,但还是存在一些问题

  1. 需要拼接URL,灵活性高,但是封装臃肿,URL复杂时,容易出错

  2. 代码可读性差,风格不统一

微服务之间的通信方式,通常由两种:RPC和HTTP

  • RestTemplate
  • OpenFeign

2. OpenFeign介绍

OpenFeign时一个声明式的 Web Service 客户端,它让微服务之间的调用变得简单,类似controller调用service,只需要创建一个接口,然后添加注解即可使用OpenFeign

OpenFeign前身

Feign时Netfix公司开源的一个组件

2016年,Netfix将Feign捐献给社区,之后发布了OpenFeign

可以简单理解为 Netfix Feign 时 OpenFeign的祖先,或者说OpenFeign是Netfix Feign 的升级版,更强大更灵活的表现

https://github.com/OpenFeign/feign

Spring Cloud OpenFeign

3. 快速上手

引入依赖

添加注解

编写OpenFeign的客户端

@FeignClient注解作用在接口上

name/value:指定feignClient的名称,用于服务发现,feign底层会使用Spring Cloud LoadBalance进行负载均衡,也可以使用url属性指定一个具体的URL

path:定义当前feignClient的统一前缀

远程调用

4. OpenFeign参数传递

product-serivce controller

productApi

oeder-service feignController

5. 最佳实践

通过观察可以看出Feign的客户端与服务提供者的controller代码非常相似

5.1 Feign 继承方式

Feign 支持继承的方式,可以把一些常用的操作封装到接口里

Spring Cloud OpenFeign Features :: Spring Cloud Openfeign

编写Product-Api moudel,然后打jar包

product-service

服务消费方

5.2 Feign抽取方式

官方推荐Feign的使用方法为继承方式,但在企业开发中,更多是把Feign接口抽取为一个独立的模块(做法和继承相似,但理念不一样)

操作方法:

将Feign的Client抽取为一个独立的模块,并把设计到的实体类都放在这个模块中,达成一个jarbao,服务消费方值需要依赖该jar包即可

删除ProductApi

引入依赖

指定扫描类

6. 服务部署

对服务打包时

Maven打包默认是从远程仓库下载,二product-api包在本地,有一下解决方法

相关推荐
逃逸线LOF16 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
code_slave(码畜)1 天前
微服务架构落地:慢 SQL 治理与连接池调优 —— 守住数据库的最后一道防线
数据库·spring boot·sql·spring cloud·微服务·架构
2501_933923252 天前
SpringCloud:OpenFeign快速实现
java·后端·spring cloud·openfeign
逃逸线LOF3 天前
为什么需要Actuator进行静态检查
spring cloud·eureka
水无痕simon3 天前
3、工程重构
java·spring cloud·重构
shuair3 天前
Spring Cloud 微服务脚手架:Simple Cloud 系统架构设计
spring cloud·微服务·系统架构
这里是杨杨吖8 天前
SpringCloud+Vue民宿房屋租赁系统 附带详细运行指导视频
vue.js·spring boot·spring cloud·房屋·民宿租赁
BioRunYiXue11 天前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html
SL_staff12 天前
金融风控规则引擎的深度实践:JVS-Rules 四大原生能力解析
spring cloud·产品·全栈