1. RestTemplate存在的问题

虽说RestTemplate对HTTP封装后,以及比直接使用HTTPClient简单方便很多了,但还是存在一些问题
-
需要拼接URL,灵活性高,但是封装臃肿,URL复杂时,容易出错
-
代码可读性差,风格不统一
微服务之间的通信方式,通常由两种: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
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包在本地,有一下解决方法
- 上传到Maven中央仓库https://www.jianshu.com/p/f726dce40bef
- 搭建Maven私服,上传jar包到私服
- 从本地读取jar包


