• 14.OpenFeign 源码分析(springcloud)


    5.1 OpenFeign 的原理是什么?
    根据上面的案例,我们知道 feign 是接口调用,接口如果想做事,必须要有实现类
    可是我们并没有写实现类,只是加了一个 @FeignClient(value= xxx-service ) 的注解
    所以我们猜测 feign 帮我们创建了代理对象,然后完成真实的调用。
    动态代理 1jdk
    invoke 2cglib 子类继承的
    1. 给接口创建代理对象(启动扫描)
    2. 代理对象执行进入 invoke 方法
    3. invoke 方法里面做远程调用
    具体我们这次的流程:
    A. 扫描注解得到要调用的服务名称和 url
    B. 拿到 provider-order-service/doOrder ,通过 ribbon 的负载均衡拿到一个服务, provider-order-service/doOrder--- http://ip:port/doOrder
    C. 发起请求,远程调用
    5.2 看看 OpenFeign 的内部是如何实现这些的
    5.2.1 如何扫描注解 @FeignClient
    查看启动类的 @EnableFeignClients

    进入 FeignClientsRegistrar 这个类 去查看里面的东西

     

     

    真正的扫描拿到注解和服务名称

     

    5.2.2 如何创建代理对象去执行调用?
    当我们启动时,在 ReflectiveFeign 类的 newInstance 方法,给接口创建了代理对象

    当我们执行调用的时候,打个断点去查看

     

    ReflectiveFeign 类中的 invoke 方法帮我们完成调用

     

    SynchronousMethodHandler invoke 中给每一个请求创建了一个 requestTemplate 象,去执行请求

    executeAndDecode

     

    我们去看 LoadBalancerFeignClient execute 方法

     

    executeWithLoadBalancer 继续往下看

     

     

     

    只要是 feign 调用出了问题
    feign 包下面的 Client 接口下面的 108
    200 成功
    400 请求参数错误
    401 没有权限
    403 权限不够
    404 路径不匹配
    405 方法不允许
    500 提供者报错了
    302 资源重定向

     

  • 相关阅读:
    美国零售电商平台Target,值得入驻吗?如何入驻?
    springMVC02,restful风格,请求转发和重定向
    介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用
    一、博弈论概述
    tp3.2和tp5.0的区别
    window10安装node.js
    MYSQL语法一:创建表和查看表的所有列和所有数据库等
    eclipse汉化方法
    JMU第1届程序设计金秋赛题解
    SpringCloud 微服务全栈体系(十五)
  • 原文地址:https://blog.csdn.net/weixin_59334478/article/details/127813428