相关文章:
【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的情况下的一个执行流程,大概流程如下:
引入openFeign情况下的执行流程:
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即可。