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

相关推荐
自强的小白8 小时前
项目整个架构的构建和演进。(重点!)
spring cloud·微服务·架构
Thomas.Sir9 小时前
第25课:Spring Cloud监控体系详解 & Actuator端点全解
spring cloud·actuator
今年下半年11 小时前
【Spring Cloud】Spring Cloud Gateway 防 XSS / 防 CSRF 实现
spring cloud·xss·csrf
Wang's Blog13 小时前
Java 项目实战: 交友项目 - SpringCloud 整合 Dubbo 的需求分析与模块规划
java·spring cloud·交友
流烟默14 小时前
Spring Cloud 微服务 Sentinel 热点参数与授权规则集成指南(附架构建议)
spring cloud·微服务·架构·sentinel
EAIReport16 小时前
SpringBoot 与 SpringCloud 深度解析:核心特点、差异与协同关系
spring boot·后端·spring cloud
Wang's Blog17 小时前
Java 项目实战: 交友项目 - SpringCloud 整合 Dubbo 的方案概述
java·spring cloud·交友
Thomas.Sir1 天前
第23课:Sentinel熔断降级、系统自适应保护、集群限流
spring cloud·sentinel
2501_933923252 天前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
叶总没有会3 天前
Gateway--网关
spring cloud·微服务·gateway