OpenFeign 架构原理(一):理解远程调用

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

大家好,我是悟空呀。

上次我们深入讲解了 Ribbon 的架构原理,这次我们再来看下 Feign 远程调用的架构原理。

一、理解远程调用

远程调用怎么理解呢?

远程调用本地调用是相对的,那我们先说本地调用更好理解些,本地调用就是同一个 Service 里面的方法 A 调用方法 B。

那远程调用就是不同 Service 之间的方法调用。Service 级的方法调用,我们自己构造请求 URL和请求参数,就可以发起远程调用了。

在服务之间调用的话,我们都是基于 HTTP 协议,一般用到的远程服务框架有 OKHttp3,Netty, HttpURLConnection 等。其调用流程如下:

但是这种虚线方框中的构造请求的过程是很繁琐的,有没有更简便的方式呢?

Feign 就是来简化我们发起远程调用的代码的,那简化到什么程度呢? 简化成就像调用本地方法那样简单。

类似我的开源项目 PassJava 中的远程调用的代码:

//远程调用拿到该用户的学习时长
R memberStudyTimeList = studyTimeFeignService.getMemberStudyTimeListTest(id);
复制代码

而 Feign 又是 Spring Cloud 微服务技术栈中非常重要的一个组件,如果让你来设计这个微服务组件,你会怎么来设计呢?

我们需要考虑这几个因素

  • 如何使远程调用像本地方法调用简单?(包扫描+动态代理)
  • Feign 如何找到远程服务的地址的?
  • Feign 是如何进行负载均衡的?(Feign 如何和 Ribbon 一起工作的)

接下来我们围绕这些核心问题来一起看下 Feign 的设计原理。

会分几篇进行详细的讲解,关注我,持续更新中。

猜你喜欢

转载自juejin.im/post/7053686438344261663
今日推荐