07-OpenFeign

本笔记来源于:尚硅谷SpringCloud框架开发教程(SpringCloudAlibaba微服务分布式架构丨Spring Cloud)
b站视频
文章来自:
https://github.com/OT-mt/cloud2020/tree/master/springcloud-2%E5%B0%9A%E7%A1%85%E8%B0%B7%E5%91%A8%E9%98%B3-2020

脑图

本地:
尚硅谷SpringCloud

在线:
尚硅谷SpringCloud

是什么

Feign是声明性Web服务客户端。它使编写Web服务客户端更加容易。要使用Feign,请创建一个接口并对其进行注释。它具有可插入的注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud添加了对Spring MVC注释的支持,并支持使用HttpMessageConvertersSpring Web中默认使用的注释。Spring Cloud集成了Ribbon和Eureka以及Spring Cloud LoadBalancer,以在使用Feign时提供负载平衡的http客户端。

能干什么

  • 使编写Java Http客户端更加容易
    使用 RestTemplate+Ribbon 时,利用 RestTemplate 对http 请求的封装处理,形成一套模板化的调用方法,但是在实际中,由于对服务的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以Feign在此基础上做了进一步封装,由他来帮助我们定义和实现服务接口的定义。在==Feign的实现下我们只需要创建一个接口并使用注解来配置它(以前是Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可)==。自动封装服务调用客户端的开发量。
  • Feign集成了Ribbon
    利用Ribbon维护了Payment的服务列表信息,并且实现了轮询实现客户端的负载均衡。而与Ribbon不同的是,==feign只需要定义服务绑定接口且以声明式的方法==,优雅而简单的实现服务调用。
  • Feign与OpenFeign区别

官网

https://cloud.spring.io/spring-cloud-openfeign/2.2.x/reference/html/

建项目:cloud-consumer-frign-order80

  1. 改pom
  2. 建yml
  3. 写启动类
    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    @EnableFeignClients
    public class OrderFeignMain80 {
    public static void main(String[] args) {
    SpringApplication.run(OrderFeignMain80.class,args);
    }
    }
  4. 写业务类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Component
    // 将业务提供者的名写进去
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE")
    public interface PaymentFeignService {

    // 将业务提供者的controller路径和方法复制粘贴进来
    @GetMapping("/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id")Long id);
    }
  5. controller
    1
    2
    3
    4
    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable Long id){
    return paymentFeignService.getPaymentById(id);
    }

    超时控制

  6. 8001 暂停
  7. 通过 8001访问
    http://localhost:8001/timeout
    可以访问
  8. 通过80 访问
    异常
  9. OpenFeign 默认等待时间 1s
  10. 设置超时时间
  11. 测试

    日志增强

    日志级别

  12. NONE:默认不显示日志
  13. BASIC:仅记录请求方法,URL,响应状态及执行时间
  14. HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
  15. FULL:除了HEADERS中定义的信息外,还有请求和响应的正文及元数据

    配置类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import feign.Logger;

    @Configuration
    public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel(){
    return Logger.Level.FULL;
    }
    }

    选择日志监听接口

    1
    2
    3
    4
    logging:
    level:
    # 选择具体接口的日志输出 级别为debug
    com.wxh.springcloud.service.PaymentFeignService: debug

07-OpenFeign
http://yuanql.top/2023/06/27/13_SpringCloud/springcloud-2尚硅谷周阳-2020/07-OpenFeign/
作者
Qingli Yuan
发布于
2023年6月27日
许可协议