Feign的调用

服务调用方式

  • Eureka ->http://ip:port/path

  • Ribbon ->http://serviceName/path

  • Feign->@FeignClient(“service-name”)

Feign

  • 简化远程调用,集成Ribbon,集成Hystrix

    • Ribbon:利用负载均衡策略选定目标机器
    • Hystrix:根据熔断器的开启状态,决定是否发起此次调用
  • 动态代理

    Feign是通过一个代理接口进行远程调用,这一步就是为了构造接口的动态代理对象,用来代理远程服务的真实调用,这样你就可以像调用本地方法一样发起HTTP请求,不需要像Ribbon或者Eureka那样在方法调用的地方提供服务名。在Feign中动态代理是通过Feign.build返回的构造器来装配相关参数,然后调用ReflectFeign的newInstance方法创建的。这里就应用到了Builder设计模式

  • Contract

    协议,顾名思义,就像HTTP协议,RPC协议一样,Feign也有自己的一套协议的规范,只不过他解析的不是HTTP请求,而是上一步提到的动态代理类。通过解析动态代理接口+Builder模式,Contract协议会构造复杂的元数据对象MethodMetadata,这里面包含了动态代理接口定义的所有特征。接下来,根据这些元数据生成一系列MethodHandler对象用来处理Request和Response请求

Feign的调用

request->拦截器->发送请求(重试策略、降级策略)

  • 拦截器 :

    • 拦截器是Spring处理网络请求的经典方案,Feign这里也沿用了这个做法,通过一系列的拦截器对Request和Response对象进行装饰,比如通过RequestInterceptor给Request对象构造请求头。整装待发之后,就是正式发起调用的时候了。
  • 发起请求:

    • 重试:Feign这里借助Ribbon的配置重试器实现了重试操作,可以指定对当前服务节点发起重试,也可以让Feign换一个服务节点重试。
    • 降级:Feign接口在声明时可以指定Hystrix的降级策略实现类,如果达到了Hystrix的超时判定,或得到了异常结果,将执行指定的降级逻辑。

猜你喜欢

转载自blog.csdn.net/tolmanlau/article/details/105737676
今日推荐