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

  • 相关阅读:
    RabbitMQ中方法channel.basicAck的使用说明
    数据合并与对比
    国密算法SSL证书
    世媒讯提供海内外媒体宣发服务,引领企业新媒体发展之路
    【服务的主从切换实现原理】
    【kotlin 协程】万字协程 一篇完成kotlin 协程进阶
    js常用方法JQ选择器
    leetcode day05 A+B问题
    解读先电2.4版 iaas-install-mysql.sh 脚本
    EasyCVR视频技术:城市电力抢险的“千里眼”,助力抢险可视化
  • 原文地址:https://blog.csdn.net/YiRenGengShangBuQi/article/details/126002669