Feign

Netflix Feign 与 OpenFeign

1、概览 本文将会带你了解 Spring Cloud Netflix Feign 与 Spring Cloud OpenFeign 之间的区别。 2、Feign 通过 Feign 提供的注解支持,我们只需要定义接口就可以实现 Web 客户端,非常简单。 最初,Feign 由 Netflix 创建并发布,是其 Netflix OSS 项目的一部分。如今,它已成为一个开源项目。 2.1、Spring Cloud Netflix Feign Spring Cloud Netflix 将 Netflix OSS 产品集成到 Spring Cloud 生态系统(全家桶)中。其中包括 Feign、Eureka、Ribbon 以及大量其他工具和实用程序。Feign 被单独定义在一个 Spring Cloud Starter 中,以便只使用 Feign。 2.2、OpenFeign 后来,Netflix 决定停止在内部使用 Feign 并停止其开发。根据这一决定,Netflix 将 Feign 完全转移到开源社区的一个名为 OpenFeign 的新项目中。 幸运的是,它继续得到开源社区的大力支持,并推出了许多新功能和更新。 2.3、Spring Cloud OpenFeign 同样,Spring Cloud OpenFeign 将 OpenFeign 项目集成到 Spring Cloud 生态系统中。 这种集成增加了对 Spring MVC 注解的支持,并提供相同的 HttpMessageConverter。

配置 Feign 的日志级别

1、概览 本文将带你了解如何在 Spring Boot 中配置 Feign 客户端的日志级别。 2、Feign 客户端 Feign 是一个声明式的 HTTP 客户端,通过注解来处理模板代码。只需提供一个带注解的接口,运行时会根据注解定义创建实际的实现。 3、日志配置 要启用日志记录,需要将应用中包含 Feign 客户端的类或包的日志记录级别设置为 DEBUG。 给一个类设置日志级别: logging.level.<packageName>.<className> = DEBUG 如果 Feign 接口都在同一个包下,也可以直接为整个 package 设置日志级别: logging.level.<packageName> = DEBUG 接着,需要设置 feign 客户端的日志级别。注意,上一步只是启用日志记录。 有四种日志级别可供选择: NONE:无日志记录(默认) BASIC:记录基本信息,包括请求方法和 URL 以及响应状态码和执行时间 HEADERS:记录基本信息以及请求和响应的 Header FULL:记录请求和响应的 Header、Body 和元数据 可以通过 Java 配置类或在 properties 文件中进行配置。 3.1、Java 配置 声明一个配置类 FeignConfig: public class FeignConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } } 然后,把配置类设置到 Feign 客户端接口 FooClient 中: @FeignClient(name = "foo-client", configuration = FeignConfig.

Feign 客户端设置 Oauth2 Token

1、概览 OpenFeign 是一个可以在 Spring Boot 中使用的声明式 REST 客户端。 假如想通过 OpenFeign 来调用使用 OAuth2 的 REST API,那么就需要给 OpenFeign 设置 Access Token。 本文将会带你了解如何为 OpenFeign 客户端添加 OAuth2 支持。 2、服务之间的认证 服务之间的认证 API 安全中的一个热门话题。我们可以使用 mTLS 或 JWT 为 REST API 提供认证机制。不过,OAuth2 协议是保护 API 的事实解决方案。假设我们想使用另一个服务(客户端)调用一个受保护的服务(服务器)。在这种情况下,使用 “客户端凭证(client credential)” 授权方式。这种授权方式通常用于在两个没有终端用户的 API 或系统之间进行身份认证。 下图显示了这种授权模式中的的主要角色关系: 在客户端凭证模式中,客户端通过 Token Endpoint 从授权服务器(Authorization Server)获取 Access Token。然后,客户端使用 Access Token 访问源服务器(Resource Server)上受资保护的资源。资源服务器会验证 Access Token,如果有效,则为请求提供服务。 2.1、授权服务器 创建一个授权服务器来发放 Access Token。为了方便,我们在 Spring Boot 中使用嵌入式 Keycloak。假设我们使用 GitHub 上的 授权服务器 项目。 首先,在嵌入式 Keycloak 服务器的 realm 管理中定义 Payment-app 客户端: