驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
SpringCloud中Feign和Ribbon的大概原理
/      

SpringCloud中Feign和Ribbon的大概原理

开篇

本文作为一个总结,主要是对Spring Cloud的部分组件原理进行一个提纲挈领的总结。具体的实现,后续有机会分享,网上也有很多。本文主要概括下 Ribbon 和 Feign的原理

Ribbon

Ribbon包括了2个部分

  1. 负载均衡算法
  2. app_name转具体的ip:port

对于第2点:Ribbon从本质上是利用了RestTemplateInterceptor进行了扩展。

SpringCloud中,consumer在发起真正请求之前,解析URL中的provider_app_name,这个是通过EurekaDiscoverClient实现中获取到对应的多个ip和端口组合,然后通过某种负载均衡算法进行选择,然后通过RestTemplateInterceptor来处理这个映射。

Feign

Feign是对接口做文章,在接口上添加注解,消费者通过调用接口的形式进行服务消费。

在Spring体系中,只要是通过调用接口来进行某个操作的,应该都是使用了动态代理技术,比如MyBatis中通过接口对应到对应的XML中的SQL。

在Spring解析的时候,核心有2个步骤:

  1. 通过接口来动态注册Bean
  2. 对接口方法进行动态代理,比如Feign就是解析@GetMapping 这类注解将其转为对应的Http Get请求。

不管是第一点还是第二点,里面都大有文章。

写文和平时做笔记不一样,做笔记可以很随意,自己懂就OK。
写文尽可能希望大家都能懂,所以上述细节,有空整理吧!

总结

Spring Cloud没有什么特别新的技术,它定义了一套上层接口,然后利用现有的开源组件进行整合。

如果你是SpringCloud初学者,希望你不要仅仅学习Spring Cloud中某个组件整合后的用法,而是去看看这门技术原生的使用方式。

上述是鄙人一些愚见,很晚了,晚安!

不积跬步,无以至千里。不积小流,无以成江海。