本文作为一个总结,主要是对Spring Cloud的部分组件原理进行一个提纲挈领的总结。
具体的实现,后续有机会分享,网上也有很多。
本文主要概括下 Ribbon 和 Feign的原理
天下事,做则不难,不做定难!
Ribbon
Ribbon包括了2个部分
- 负载均衡算法
- app_name转具体的ip:port
对于第2点:Ribbon从本质上是利用了RestTemplate的Interceptor进行了扩展。
SpringCloud中,consumer在发起真正请求之前,解析URL中的provider_app_name,这个是通过Eureka的DiscoverClient实现中获取到对应的多个ip和端口组合,然后通过某种负载均衡算法进行选择,然后通过RestTemplate的Interceptor来处理这个映射。
Feign
Feign是对接口做文章,在接口上添加注解,消费者通过调用接口的形式进行服务消费。
在Spring体系中,只要是通过调用接口来进行某个操作的,应该都是使用了动态代理技术,比如MyBatis中通过接口对应到对应的XML中的SQL。
在Spring解析的时候,核心有2个步骤:
- 通过接口来动态注册Bean
- 对接口方法进行动态代理,比如Feign就是解析@GetMapping 这类注解将其转为对应的Http Get请求。
不管是第一点还是第二点,里面都大有文章。
总结
Spring Cloud没有什么特别新的技术,它定义了一套上层接口,然后利用现有的开源组件进行整合。
如果你是SpringCloud初学者,希望你不要仅仅学习Spring Cloud中某个组件整合后的用法,而是去看看这门技术原生的使用方式。
原创不易,转载请注明出处,感谢关注、评论、收藏!