Spring Cloud(六)Feign知识点

1、什么是Feign

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。

使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

具体作用体现在

Feign 采用的是基于接口的注解
Feign 整合了ribbon,具有负载均衡的能力
整合了Hystrix,具有熔断的能力

2、Feign远程调用的基本流程

程序启动时,会进行包扫描,扫描所有包下所有@FeignClient注解的类,按照注解的规则,创建远程接口的本地JDK Proxy代理实例。然后,将这些本地Proxy代理实例,注入到Spring IOC容器中。

当远程接口的方法被调用,传入参数,根据参数再应用到请求上,进而转化成真正的 Request 请求。由Proxy代理实例去完成真正的远程访问,并且返回结果。

可以不通过HTTP框架请求,完成远程服务的http调用。

3、Feign工作原理

在这里插入图片描述
PS:(图片来源网上素材)

1、基于面向接口的动态代理方式生成实现类

使用feign ,需要定义接口,接口上需要使用到Http相关的注解,标识HTTP请求参数信息。

Feign通过基于面向接口的动态代理方式生成实现类,将请求调用委托到动态代理实现类上

@FeignClient(value = "service-client",fallback = HelloWorldServiceImpl.class)
public interface HelloWorldService {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    String helloWorld(@RequestParam(value = "name") String name);
}

2、根据Contract协议规则,解析接口类的注解信息,解析成内部表现

3、基于 RequestBean,动态生成Request

根据传入的Bean对象和注解信息,从中提取出相应的值,来构造Http Request 对象

4、使用Encoder 将Bean转换成 Http报文正文(消息解析和转码逻辑)

5、拦截器负责对请求和返回进行装饰处理
在请求转换的过程中,Feign 抽象出来了拦截器接口,用于用户自定义对请求的操作,比如,如果希望Http消息传递过程中被压缩,可以定义一个请求拦截器。

6、日志记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值