• 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去处理
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    JavaSE之异常
    面向对象技术浅析
    Unity实现简易坦克移动打炮
    15 【严格模式】
    怎样在CSDN插入代码块 怎么变色?
    LeetCode 47 全排列 II - Java 实现
    Python连接Mongodb数据库-PyMongo模块
    YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
    Webpack中的plugin插件机制
    Windows重启时的电脑蓝屏怎么办?
  • 原文地址:https://blog.csdn.net/YiRenGengShangBuQi/article/details/126002669