【spring cloud 】Ribbon和OpenFeign(代替RestTemplate)

文章目录

  • 概述
  • 参考

相关文章:
【spring cloud 】Ribbon和OpenFeign(代替RestTemplate)
Dubbo 与 Feign 的区别
nacos、ribbon和feign的简明教程

概述

Ribbon和OpenFeign我个人认为是两个东西

  • Ribbon侧重于做服务调用时的负载均衡,是一种算法实现
  • 而OpenFeign侧重于面向接口进行服务调用,即rpc框架,类似的还有dubbo。特点是代码比较简洁,调用xx接口就可以实现访问另外一个服务,不需要写很长的url。虽然是接口形式,底层还是需要依赖相应的通信协议,例如Http协议,dubbo协议

dubbo框架的底层采用dubbo协议,也可以采用Http协议,dubbo协议可以被其他框架使用。也就是说框架和协议是独立的东西

  • RestTemplate功能和OpenFeign类似,用于2个服务之间的通信,RestTemplate采用是http调用客户端,缺点是面向url,而非接口,没有rpc框架好用。

在只引入Ribbon依赖的时候,可以使用restTemplate来进行服务调用, 这是没有OpenFeign的情况下的一个执行流程,大概流程如下:
【spring cloud 】Ribbon和OpenFeign(代替RestTemplate)_第1张图片

引入openFeign情况下的执行流程:
【spring cloud 】Ribbon和OpenFeign(代替RestTemplate)_第2张图片
OpenFeign相比Ribbon在代码实现上是在客户端多了一层接口,之前用ribbon的时候客户端只有controller层,通过restTemplate请求服务端的controller层。Openfeign需要在客户端创建一个service层,并创建一个service接口(要用到@FeignClient注解),其方法和服务端的controller里的方法相对应,之后客户端的controller调这个接口就行了。

OpenFeign的引入直接砍掉了restTemplate,客户端controller在调用服务端时不需要再关注请求的方式、地址以及是forObject还是forEntity,完全面向接口调用,层次结构更加明了,而且OpenFeign自身集成Ribbon,所以默认开启轮询的负载均衡。(虽然Eureka也集成了ribbon,但大概是eureka已经停更了,所以openFeign集成了ribbon)。而且还可以和hystrix相结合,写一个类实现service接口,其中实现的方法的方法体便是降级或熔断的fallback方法(需要在接口中指定该实现类)。这样结构更清晰,耦合也更低。

引入依赖时,只用引入OpenFeign即可,会自动下载ribbon包。

我们不用过多去研究ribbon,它只是一个提供负载均衡的,大多时候只是更改负载均衡的算法。我们只需要编写好feign的接口以及其降级实现类, 所以引入依赖时,只用引入OpenFeign即可。

参考

Ribbon和OpenFeign

你可能感兴趣的:(spring,cloud,spring,restful,java)