5. Feign Http客户端

108 阅读2分钟

1 为什么使用Feign

Feign 用来代替RestTemplate

RestTemplate方式调用的问题

  1. 不了解RestTemplate的 不知道怎么使用
  2. 当请求参数多的时候 不太适用

image.png

image.png 2 使用Feign

  1. 导入依赖
<!-- feign 依赖--> 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency>
  1. 开启Feign

image.png 3. 写调用接口类

image.png

  1. Controller调用

image.png

小总结

image.png

3 自定义Feign配置

image.png

一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可

3.1 配置文件方式

  • NONE:不记录任何日志信息,这是默认值。

  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间

  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息

  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

feign: 
    client: 
        config: 
            userservice: # 针对某个微服务的配置 当调用adminservice时候 就不生效
                loggerLevel: FULL # 日志级别 
            # default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置 
            # loggerLevel: FULL # 日志级别

3.2 配置类方式

image.png

全局生效

image.png

某服务生效

image.png

小总结

image.png

4 性能优化

image.png 引入依赖httpClient连接池

<!-- feign httpclient连接池-->
<dependency> 
    <groupId>io.github.openfeign</groupId> 
    <artifactId>feign-httpclient</artifactId> 
</dependency>

配置连接池

httpclient:
    enabled: true # 开启feign对HttpClient的支持 
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

4.1 代码优化

方案1

在springmvc中 接口中的参数 和@pathVariable参数也继承不了,不起作用

image.png

方案2

image.png 总结

image.png

5 实现方案2

实现流程

image.png

  1. 创建module,引入feign依赖

image.png

<dependencies> 
    <dependency>
        <groupId>org.springframework.cloud</groupId> 
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>
  1. 拷贝代码

image.png

  1. 在order-service中引入公共feign依赖

image.png

  1. 启动

报错了 因为扫描不到boot启动类之外的包 所以注入不了userClient

image.png

解决方案 选2

image.png

总结

image.png