• SpringCloud——OpenFeign(简介、快速入门、手写Feign)


    简介

    Feign 是声明性(注解)Web 服务客户端。它使编写 Web 服务客户端更加容易。要使用 Feign, 请创建一个接口并对其进行注解。Spring Cloud 集成 了 Ribbon 和 Eureka 以及 Spring Cloud LoadBalancer,以在使用 Feign 时提供负载平衡 的 http 客户端
    Feign 是一个远程调用的组件 (接口,注解) http 调用的
    Feign 集成了 ribbon ribbon 里面集成了 eureka

    快速入门

    结构

    在这里插入图片描述

    1.创建OrderService

    导入Web、DiscoveryClient、Lombok依赖
    修改版本号,重命名启动类(详细见Eureka客户端创建篇)
    修改yml文件

    server:
      port: 8080
    spring:
      application:
        name: order-service
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.创建User-Server

    同上
    依赖:

    在这里插入图片描述

    要使用Feign进行远程调用,要先在启动类上加注解@EnableFeignClients
    在这里插入图片描述
    之后需要创建一个接口,并对其进行注解@FeignClient(value = “order-service”),接着将需要调用的服务方法签名粘贴到接口中

    /*
    * @FeignClient(value = "order-service")
    * value是提供者的应用名称
    * */
    @FeignClient(value = "order-service")
    public interface UserOrderFeign {
        @GetMapping("doOrder")
        String doOrder();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在user-service的controller中将接口注入,使用方法调用
    在这里插入图片描述

    测试:
    在这里插入图片描述

    总结:

    浏览器(前端)——》user-service(/userDoOrder)——》rpc(feign)——》order-service(/doOrder)

    OpenFeign等待时间

    默认OpenFeign调用其他服务,只会等待1s,超时则会报错,若想延长时间,可以在消费者端yml中进行配置

    • 因为feign只是封装了远程调用功能,底层还是ribbon,所以可以对ribbon进行配置
      ribbon不会进行提示,可以双shift查找DefaultClientConfigImpl
      在这里插入图片描述
      在注释中可以找到
      在这里插入图片描述

    进行配置:

    ribbon:
      ReadTimeOut: 3000 # 给3s服务调用超时时间
      ConnectTimeout: 3000 # 连接服务超时时间
    
    • 1
    • 2
    • 3

    手写OpenFeign的过程

    接口是被jdk动态代理,进行Debug会发现是一个$Proxy对象
    jdk动态代理,只要是代理对象调用的方法必须走 invoke
    在调用方法处打断点,浏览器进行访问,按住Alt键,鼠标点击实例对象在这里插入图片描述
    简单说就是使用动态代理的invoke方法,拿到GetMapping注解里面的值,再拿FeignClient注解里面的值,将他们拼成ribbon所需的url模式,交给ribbon去处理
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Vue.js 组件化开发
    竞赛选题 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉
    第14章: 集合
    【贪心算法】背包问题
    003. 电话号码的字母组合——回溯算法
    外贸供应链ERP怎么选?全流程综合管理解析
    重温设计模式之什么是设计模式?
    gerrit系统如何配置访问控制
    【C++】STL之String模拟实现
    Devchat-AI 编程助手:Devchat-AI 尝鲜测评+场景实践
  • 原文地址:https://blog.csdn.net/YiRenGengShangBuQi/article/details/126002669