微服务组件之OpenFeign配置信息及RequestInterceptor请求拦截器

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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<String, String> getUserInfo(@RequestParam("username") String username);

}

// 这是对应的实现类

public class ApiFallback implements ApiProviderFeign{

   /**

    * 调用失败时候,会执行这个方法

    */

   @Override

   public Map<String, String> getUserInfo(String username) {

       return new HashMap<>();

   }

}


1.2、常见配置信息

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




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


loggerLevel:日志级别,四个取值:

NONE 不打印日志;

BASIC:只打印请求方法、URL、响应状态码、执行时间。

HEADERS:打印请求头、响应头的日志信息。

FULL:打印所有日志。

connectTimeout:连接超时时间,单位毫秒:ms。

readTimeout:读取超时时间,单位毫秒:ms。

retryer:重试策略。

requestInterceptors:自定义的拦截器,可以多个,是一个List集合。

defaultRequestHeaders:默认的请求头信息。

defaultQueryParameters:默认的查询参数信息。

followRedirects: 是否允许重定向。



二、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请求拦截器的使用。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
8月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
333 0
|
8月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1017 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
8月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
1127 0
|
8月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
308 0
|
8月前
|
前端开发 JavaScript Java
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器的快速使用
本文介绍了在Spring Boot中使用拦截器的方法,包括拦截器的基本原理、定义与配置步骤。拦截器是AOP的一种实现,主要用于拦截对动态资源的请求,如判断用户权限或结合WebSocket使用。文章详细讲解了通过实现`HandlerInterceptor`接口来自定义拦截器,并重写`preHandle`、`postHandle`和`afterCompletion`三个核心方法。
1469 0
|
8月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1114 0
|
8月前
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
363 0
|
8月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
351 0
|
8月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
168 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
656 6

热门文章

最新文章