【微服务笔记06】微服务组件之OpenFeign配置信息及RequestInterceptor请求拦截器

这篇文章,主要介绍微服务组件之OpenFeign相关配置信息及RequestInterceptor请求拦截器的使用。

目录

一、OpenFeign注解和配置信息

1.1、常见注解

(1)@EnableFeignClients

(2)@FeignClient

1.2、常见配置信息

二、RequestInterceptor请求拦截器

2.1、实现RequestInterceptor接口

2.2、全局配置拦截器

2.3、局部配置拦截器


一、OpenFeign注解和配置信息

1.1、常见注解

(1)@EnableFeignClients

@EnableFeignClients 注解:启用OpenFeign组件,可以设置一个扫描路径,这样在启动工程的时候,OpenFeign就会扫描工程中指定的包路径下,所有包含【@FeignClient】的类,将其作为OpenFeign客户端。这个注解中含有下面几个属性:

  • basePackages:指定扫描的包路径,是一个数组类型,可以多个包路径。
  • value:作用和basePackages是一样的。
  • clients:直接指定 FeignClient 客户端的类对象,是一个Class数组。

一般情况下,@EnableFeignClients 注解都是直接在启动类上面使用即可,默认就是扫描所在类的包及其子包路径。

(2)@FeignClient

@FeignClient 注解:将某个接口标记为 OpenFeign 的客户端对象,OpenFeign 根据 @FeignClient 注解扫描指定的接口,然后为其生成对应的代理对象,实现微服务接口的调用。该注解常见属性有如下几个:

  • value、name:设置调用微服务的服务名称(注意:接口调用时候,就是根据这个名称从注册中心获取对应的IP和Port端口)。
  • path: 设置方法级别的路径前缀,例如:调用的接口路径都包含 /api 则可以提取出来,放到 path 属性里面。
  • fallback: 服务调用异常时候,会调用 fallback 指定类中的对应方法,实现服务的降级功能(注意:这个指定的类,必须是实现了@FeignClient 注解对应的接口)。
// 声明当前接口采用 OpenFeign 进行调用 service-provider 微服务
@FeignClient(value = "service-provider", path = "/api", fallback = ApiFallback.class)
public interface ApiProviderFeign {

    // 定义调用的接口
    @PostMapping("/service/provider/getUserInfo")
    Map getUserInfo(@RequestParam("username") String username);

}

// 这是对应的实现类
public class ApiFallback implements ApiProviderFeign{
    /**
     * 调用失败时候,会执行这个方法
     */
    @Override
    public Map getUserInfo(String username) {
        return new HashMap<>();
    }
}

1.2、常见配置信息

FeignClientProperties 是 OpenFeign 的配置属性类,其中有一个 config 属性,这个属性是一个Map集合,可以配置多个FeignClientConfiguration 类型的配置属性。Map集合中的key就是微服务名称,value就是FeignClientConfiguration类型的配置信息。

【微服务笔记06】微服务组件之OpenFeign配置信息及RequestInterceptor请求拦截器_第1张图片

在application.yml配置文件里面,可以添加feign相关的配置信息,常见的配置信息有如下这些:

  • loggerLevel:日志级别,四个取值:
    • NONE 不打印日志;
    • BASIC:只打印请求方法、URL、响应状态码、执行时间。
    • HEADERS:打印请求头、响应头的日志信息。
    • FULL:打印所有日志。
  • connectTimeout:连接超时时间,单位毫秒:ms。
  • readTimeout:读取超时时间,单位毫秒:ms。
  • retryer:重试策略。
  • requestInterceptors:自定义的拦截器,可以多个,是一个List集合。
  • defaultRequestHeaders:默认的请求头信息。
  • defaultQueryParameters:默认的查询参数信息。
  • followRedirects: 是否允许重定向。

【微服务笔记06】微服务组件之OpenFeign配置信息及RequestInterceptor请求拦截器_第2张图片

二、RequestInterceptor请求拦截器

RequestInterceptor是OpenFeign提供的一个拦截器,它可以在每一次接口调用之前,对这个接口进行拦截器,你可以对这个接口做一些额外的处理,例如:权限认证、添加请求头信息等等操作。

2.1、实现RequestInterceptor接口

  • 自定义一个类,实现RequestInterceptor接口,重写【apply()】方法。
package com.gitee.code.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;

/**
 * @version 1.0.0
 * @Date: 2023/4/5 8:49
 * @Copyright (C) ZhuYouBin
 * @Description: 请求拦截器
 */
public class CustomFeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        // TODO 在这里可以实现一些自定义的逻辑,例如:用户认证
        System.out.println("执行拦截器....");
    }
}

2.2、全局配置拦截器

上面虽然写好了拦截器,但是OpenFeign还不知道有这个拦截器,所以还需要通过配置,告诉OpenFeign使用我自己编写的拦截器。编写一个配置类,使用@Configuration注解,并且使用@Bean注解将RequestInterceptor注入到IOC容器里面。

  • 注意:这种方式配置的拦截器,是对所有的FeignClient都生效的。
package com.gitee.code.config;

import com.gitee.code.interceptor.CustomFeignInterceptor;
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @version 1.0.0
 * @Date: 2023/4/5 8:53
 * @Copyright (C) ZhuYouBin
 * @Description: OpenFeign 配置类
 */
@Configuration
public class FeignConfig {
    /**
     * 注入自定义的拦截器
     */
    @Bean
    public RequestInterceptor requestInterceptor() {
        return new CustomFeignInterceptor();
    }

}

2.3、局部配置拦截器

有些时候,我们可能不想所有的FeignClient都使用拦截器,只是某一个FeignClient可能要使用拦截器的功能,那么这个时候就不能采用全局配置的方式,需要采用局部配置的方式,局部配置是在【application.yml】配置文件中设置。

  • 注意:采用下面这种配置,只会针对【service-provider】的微服务请求执行拦截器。
# feign 配置
feign:
  client:
    config:
      # 这里写微服务的服务名称,例如:我这里写的是 service-provider 服务名称
      # 针对 service-provider 微服务的请求,都将执行这些配置信息
      service-provider:
        loggerlevel: full
        # 配置请求拦截器,可以多个
        requestInterceptors:
          - com.gitee.code.interceptor.CustomFeignInterceptor

到此,OpenFeign配置信息和RequestInterceptor请求拦截器就介绍完啦。

综上,这篇文章结束了,主要介绍微服务组件之OpenFeign相关配置信息以及RequestInterceptor请求拦截器的使用。

你可能感兴趣的:(微服务笔记,微服务,OpenFeign,请求拦截器,OpenFeign拦截器,OpenFeign配置信息)