feign

feign原理

主程序入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处理。根据Feign Client的开发规范,定义接口并加@FeignClientd注解。

当程序启动时,会进行包扫描,扫描所有@FeignClients的注解的类,并且将这些信息注入Spring IOC容器中,当定义的的Feign接口中的方法被调用时,通过JDK的代理方式,来生成具体的RequestTemplate.

当生成代理时,Feign会为每个接口方法创建一个RequestTemplate。当生成代理时,Feign会为每个接口方法创建一个RequestTemplate对象,该对象封装了HTTP请求需要的全部信息,如请求参数名,请求方法等信息都是在这个过程中确定的。

然后RequestTemplate生成Request,然后把Request交给Client去处理,这里指的是Client可以是JDK原生的URLConnection,Apache的HttpClient,也可以是OKhttp,最后Client被封装到LoadBalanceClient类,这个类结合Ribbon负载均衡发起服务之间的调用。

feign特性
  • 整合了Hystrix,支持fallback容错降级
  • 整合了Ribbon,直接请求的负载均衡
  • 支持HTTP请求和响应的压缩
  • 使用OkHttp替换原生URLConnection,提高效率
feign、ribbon和hystrix

image

  1. 如果feign.hystrix.enabled=true(默认为false),则feign通过jdk动态代理,将调用封装为HystrixCommand,在hystrix thread pool中执行,否则进入3和4;
  2. hystrix thread pool中执行http调用,还是回调feign接口;
  3. feign扩展了ribbon客户端,使用ribbon的服务定位和负载均衡获得可用服务;
  4. feign扩展的ribbon客户端发起对app2.controller2.handler2的http请求,ribbon可以开启重试,如果请求超时则自动重试。
feign、openfeign

Feign本身不支持Spring MVC的注解,它有一套自己的注解,Feign支持的注解和用法请参考官方文档:
Feign

OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,
并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值