优雅实现远程调用-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包在本地,有一下解决方法

相关推荐
Rain的Java大神之路2 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
需要8262 天前
MySQL 索引 B+ 树与“查询为什么变慢了
java·spring boot·spring·spring cloud·tomcat
需要8263 天前
Arthas 一个命令排查线上问题
java·jvm·spring·spring cloud
苏渡苇4 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
叶总没有会4 天前
Nacos—注册中心
spring cloud·微服务
苏渡苇5 天前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring·spring cloud·系统监控·apm
叶总没有会5 天前
微服务--分布式基础
java·spring·spring cloud·微服务
孙启超5 天前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
行百里er6 天前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring cloud·监控
砍材农夫7 天前
spring|spring web|拦截器、过滤器、aop
java·spring boot·spring·spring cloud