基于Feign的远程服务调用

背景分析

服务消费方基于rest方式请求服务提供方的服务时,一种直接的方式就是自己拼接url,拼接参数然后实现服务调用,但每次服务调用都需要这样拼接,代码量复杂且不易维护,此时Feign诞生。
Feign是什么

Feign 是一种声明式Web服务客户端,底层封装了对Rest技术的应用,通过Feign可以简化服务消费方对远程服务提供方法的调用实现。如图所示:
基于Feign的远程服务调用_第1张图片Feign 调用过程分析(了解)

Feign应用过程分析(底层逻辑先了解):
1)通过 @EnableFeignCleints 注解告诉springcloud,启动 Feign Starter 组件。
2) Feign Starter 在项目启动过程中注册全局配置,扫描包下所由@FeignClient注解描述的接口,然后由系统底层创建接口实现类(JDK代理类),并构建类的对象,然后交给spring管理(注册 IOC 容器)。
3) 接口被调用时被动态代理类逻辑拦截,将 @FeignClient 请求信息通过编码器生成 Request对象,基于此对象进行远程过程调用。
4) 请求对象经Ribbon进行负载均衡,挑选出一个健康的 Server 实例(instance)。
5) 通过 Client 携带 Request 调用远端服务返回请求响应。
6) 通过解码器生成 Response 返回客户端,将信息流解析成为接口返回数据。
小节面试分析

为什么使用feign?(基于Feign可以更加友好的实现服务调用,简化服务消费方对服务提供方方法的调用)。
@FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)
Feign方式的调用,底层负载均衡是如何实现的?(Ribbon)
@EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类)

总结(Summary)
重难点分析

何为注册中心?(用于记录服务信息的一个web服务,例如淘宝平台,滴滴平台,美团外卖平台,……)
注册中心的核心对象?(服务提供方,服务消费方,注册中心-Registry)
市面上常用注册中心?(Google-Consul,Alibaba-Nacos,…)
微服务架构下项目的构建过程?(聚合工程)
Nacos安装、启动、服务的注册、发现机制以及实现过程?
Feign的基本应用以及底层底层调用原理?

FAQ分析

Nacos是什么,提供了什么特性(服务的注册、发现、配置)?
你为什么会选择Nacos?(活跃度、稳定、性能、学习成本)
Nacos的官网?(nacos.io)
Nacos在github的源码?(github.com/alibaba/nacos)
Nacos在windows环境下安装?(解压即可使用)
Nacos在windows中的的初步配置?(application.properties访问数据库的数据源)
Nacos服务注册的基本过程?(服务启动时发送web请求)
Nacos服务消费的基本过程?(服务启动时获取服务实例,然后调用服务)
Nacos服务负载均衡逻辑及设计实现?(Ribbon)
注册中心的核心数据是什么?(服务的名字和它对应的网络地址)
注册中心中心核心数据的存取为什么会采用读写锁?(底层安全和性能)
Nacos健康检查的方式?(基于心跳包机制进行实现)
Nacos是如何保证高可用的?(重试,本地缓存、集群)
Feign是什么,它的应用是怎样的,feign应用过程中的代理对象是如何创建的(JDK)?
Feign方式的调用过程,其负载均衡是如何实现?(Ribbon)
本章详情

你可能感兴趣的:(项目,restful,spring,面试)