SpringCloud学习(2)-OpenFeign

发布于:2024-04-02 ⋅ 阅读:(70) ⋅ 点赞:(0)

1.OpenFeign简介

Feign是一个声明式的Web服务客户端(Web服务客户端就是Http客户端),让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。

cloud官网介绍Feign:Spring Cloud OpenFeign

OpenFeign源码:https://github.com/OpenFeign/feign

2.OpenFeign能干什么

Java当中常见的Http客户端有很多,除了Feign,类似的还有Apache 的 HttpClient 以及OKHttp3,还有SpringBoot自带的RestTemplate这些都是Java当中常用的HTTP 请求工具。

什么是Http客户端?

当我们自己的后端项目中 需要 调用别的项目的接口的时候,就需要通过Http客户端来调用。在实际开发当中经常会遇到这种场景,比如微服务之间调用,除了微服务之外,可能有时候会涉及到对接一些第三方接口也需要使用到 Http客户端 来调用 第三方接口。

所有的客户端相比较,Feign更加简单一点,在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定。

一句话:OpenFeign可以提供声明式定义服务接口供调用

3.maven依赖

<dependency>            
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

4.配置文件

spring:
  application:
    openfeign:
      client:
        config:
          default:
      ## default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
            connect-timeout: 20000 
            read-timeout: 20000
      httpclient:
      #openfeign默认的httpclient不支持连接池,性能效率较低,官方推荐使用Apache HttpClient5
        hc5:
          enabled: true
      #设置openfeign的请求响应压缩
      compression:
        request:
          enabled: true
          #支持压缩的数据类型
          mime-types: text/xml,application/xml,application/json 
          min-request-size: 2048
        response:
          enabled: true
#设置feign日志 logging.level+@FeignClient完整接口名+debug
logging:
  level:
    com:
      sunxiao:
        cloud:
          apis:
            PayFeignApi: debug

5.启动和配置类

启动类要开启openfeign:@EnableFeignClients。
配置类:
@Configuration
public class FeignConfig {

    // 重试机制
    @Bean
    public Retryer myRetryer() {
        return new Retryer.Default();
        // 初次间隔 最大间隔 最大请求次数(1+2) = 3
//        return new Retryer.Default(100, 1, 3);
    }

    // 日志记录级别
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

6.接口

@FeignClient(value = "servicename")
public interface PayFeignApi {

    @PostMapping("/Users")
    Result<Integer> addUser(@RequestBody UserDTO user);
}

7.客户端调用

@RestController
@RequestMapping("/feign")
public class OrderController {

    //注入接口对象
    @Resource
    private PayFeignApi payFeignApi;

    @PostMapping("/users")
    public Result<Integer> test(@RequestBody UserDTO userDTO) {

        return payFeignApi.addUser(userDTO);
    }
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到