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

相关推荐
YOU OU1 小时前
Spring Cloud概述
后端·spring·spring cloud
随遇而安zx4 小时前
SpringCloud---可观测性与监控:Actuator / Micrometer / Prometheus / Grafana 深度解析
spring cloud·grafana·prometheus
LlmCraft|大模型工程实践6 小时前
08. Docker Compose 一键编排:多容器应用的指挥家
java·spring cloud·eureka
橘子编程7 小时前
Java邮件发送全攻略:从入门到实战
java·开发语言·spring boot·spring·spring cloud·maven
苏渡苇9 小时前
HandlerInterceptor 和 WebFilter:两套 HTTP 请求拦截
spring boot·spring·http·spring cloud
随遇而安zx9 小时前
SpringCloud---安全(Security / OAuth2 / JWT)设计思想与深度解析
安全·spring cloud
骇客野人9 小时前
SpringBoot+SpringCloud高并发系统设计、搭建与落地实施方案
java·spring boot·spring cloud
随遇而安zx11 小时前
SpringCloud---Gateway vs Netflix Zuul 网关对比深度解析
spring·spring cloud·gateway
随遇而安zx1 天前
SpringCloud---Spring Cloud 分布式任务调度(XXL-Job / ElasticJob)
分布式·spring cloud